对于蹩脚的标题感到抱歉......如果我能用几句话总结一下,我可能会在这里找到现有的解决方案更好!
我有一个简化的表格如下:
ID PRODUCT
___ _________
100 Savings
200 Mortgage
200 Visa
300 Mortgage
300 Savings
我需要根据每个ID的产品选择行。例如,我可以这样做:
SELECT DISTINCT ID
FROM table1
WHERE Product NOT IN ('Savings', 'Chequing')
这将返回:
ID
___
200
300
然而,在ID 300的情况下,他们确实有储蓄,所以我实际上不希望这返回。用简单的英语我想
从表1中选择*其中'储蓄'和' Chequing'不是具有该ID的任何行的产品。
在这种情况下,期望的结果是ID为200的一行,因为它们没有储蓄或支票。
我该怎么做?
答案 0 :(得分:1)
选择与您不想匹配的项匹配的行,然后比较热量ID
e.g。
select distinct id from table1 where id not in (
SELECT ID
FROM table1
WHERE Product IN ('Savings', 'Chequing')
)
答案 1 :(得分:0)
您可以使用NOT EXISTS
:
SELECT DISTINCT t1.ID
FROM dbo.Table1 t1
WHERE NOT EXISTS
(
SELECT 1 FROM dbo.Table1 t2
WHERE t2.Poduct IN ('Savings', 'Chequing')
AND t2.ID = t1.ID
)
值得一读:Should I use NOT IN, OUTER APPLY, LEFT OUTER JOIN, EXCEPT, or NOT EXISTS?