如何用PL/SQL查询Table2中未匹配对应分类范围的记录
查询Table2中未匹配对应分类范围的记录
假设Table1为分类范围表,结构包含category(分类名称)、min_val(区间最小值)、max_val(区间最大值);Table2为待检查表,包含数值字段(例如num_val)。以下是几种实现方式:
方式1:用NOT EXISTS子查询直接筛选
SELECT t2.* FROM Table2 t2 WHERE NOT EXISTS ( SELECT 1 FROM Table1 t1 WHERE t2.num_val BETWEEN t1.min_val AND t1.max_val );
逻辑:对Table2的每条记录,检查是否不存在Table1中能覆盖其数值的区间,不存在则返回该记录。
方式2:通过LEFT JOIN筛选未匹配项
SELECT t2.* FROM Table2 t2 LEFT JOIN Table1 t1 ON t2.num_val BETWEEN t1.min_val AND t1.max_val WHERE t1.category IS NULL;
逻辑:LEFT JOIN保留Table2所有记录,匹配到区间的记录会关联上Table1的分类信息,未匹配的记录中Table1的字段为NULL,以此筛选目标记录。
PL/SQL块处理(含输出)
如果需要在PL/SQL中处理并输出结果:
DECLARE CURSOR cur_unmatched IS SELECT t2.* FROM Table2 t2 WHERE NOT EXISTS ( SELECT 1 FROM Table1 t1 WHERE t2.num_val BETWEEN t1.min_val AND t1.max_val ); rec_unmatched cur_unmatched%ROWTYPE; BEGIN OPEN cur_unmatched; LOOP FETCH cur_unmatched INTO rec_unmatched; EXIT WHEN cur_unmatched%NOTFOUND; DBMS_OUTPUT.PUT_LINE('未匹配记录:数值=' || rec_unmatched.num_val || '(无对应分类区间)'); END LOOP; CLOSE cur_unmatched; END; /
内容的提问来源于stack exchange,提问作者praveen
相关产品推荐
相关产品推荐

