Oracle SQL查询:获取满足三条件的唯一PC_ID(禁用COUNT)
满足多条件的Oracle SQL查询方案
针对你的需求,这里提供两种简洁且不使用COUNT函数的写法,均能适配PC_ID重复、EDI_ID不固定的数据集:
方法1:多表关联+去重
通过三次关联表B,分别匹配三个KEY-VALUE条件,确保同一个PC_ID对应的EDI_ID能命中所有要求,最后用DISTINCT获取唯一PC_ID:
SELECT DISTINCT a.PC_ID FROM table_a a JOIN table_b b1 ON a.EDI_ID = b1.ID AND b1.KEY = 'X' AND b1.VALUE = 'some' JOIN table_b b2 ON a.EDI_ID = b2.ID AND b2.KEY = 'Y' AND b2.VALUE = 'something' JOIN table_b b3 ON a.EDI_ID = b3.ID AND b3.KEY = 'Z' AND b3.VALUE = 'thing';
方法2:INTERSECT交集查询
分别查询满足单个条件的PC_ID,再通过INTERSECT取三个结果集的交集,自动实现去重:
SELECT a.PC_ID FROM table_a a JOIN table_b b ON a.EDI_ID = b.ID WHERE b.KEY = 'X' AND b.VALUE = 'some' INTERSECT SELECT a.PC_ID FROM table_a a JOIN table_b b ON a.EDI_ID = b.ID WHERE b.KEY = 'Y' AND b.VALUE = 'something' INTERSECT SELECT a.PC_ID FROM table_a a JOIN table_b b ON a.EDI_ID = b.ID WHERE b.KEY = 'Z' AND b.VALUE = 'thing';
这两种写法都比多层IN子查询更简洁易读,且能正确处理你提到的复杂数据集场景。
内容的提问来源于stack exchange,提问作者LiefLayer
相关产品推荐
相关产品推荐

