我正在寻找编写SQL来返回行,其中VENDOR_ID
既包含NBR_ID = 1
的行又包含NBR_ID = 2
的行。在下面的示例中,SQL将返回VENDOR_ID
93309A,具有NBR_ID
1的行和具有NBR_ID
2的另一行的数据。
GROUP_ID VENDOR_ID NBR_ID
AUX 27 1
AUX 87188A 1
AUX 92481A 1
AUX 92482A 1
AUX 92527A 1
AUX 93309A 1
AUX 93309A 2
AUX 93328A 1
我编写了以下SQL,但这并没有明确返回VENDOR_ID
,其中NBR_ID为1的行和NBR_ID为2的另一行。
SELECT GROUP_ID, VENDOR_ID, NBR_ID
FROM TEST_TABLE
WHERE NBR_ID IN (1,2)
如何更新以仅返回这些VENDOR_ID
位于不同行的NBR_ID
?
答案 0 :(得分:1)
使用相关子查询
SELECT GROUP_ID,VENDOR_ID,NBR_ID
FROM TEST_TABLE a
WHERE exists(select 1 from TEST_TABLE b where a.GROUP_ID=b.group_id and
a.VENDOR_ID=b.vendor_id and NBR_ID IN (1,2)
having count(distinct nbr_id)=2) and NBR_ID IN (1,2)
答案 1 :(得分:0)
您可以使用聚合:
SELECT GROUP_ID, VENDOR_ID
FROM TEST_TABLE
WHERE NBR_ID IN (1, 2)
GROUP BY GROUP_ID, VENDOR_ID
HAVING COUNT(DISTINCT NBR_ID) = 2;
由于两个原因,它不会返回NBR_ID
。首先,您的问题未指定您想要的。其次,这是多余的,因为您知道列表同时包含1和2。
答案 2 :(得分:0)
使用存在
select t1.* from TEST_TABLE t1
where exists ( select 1 from TEST_TABLE t2 where t1.VENDOR_ID=t2.VENDOR_ID
and t1.GROUP_ID=t2.GROUP_ID
and NBR_ID in (1,2)
having count(distinct NBR_ID)=2)
and NBR_ID in (1,2)