0

很抱歉这个蹩脚的标题......如果我能用几句话来概括这一点,我可能会更幸运地在这里找到一个现有的解决方案!

我有一个简化的表格,如下所示:

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 中选择 *,其中“储蓄”和“支票”不是具有该 ID 的任何行的产品。

在这种情况下,所需的结果将是 ID 为 200 的一行,因为它们没有储蓄或支票。

我怎样才能做到这一点?

4

2 回答 2

1

选择与您不想匹配的项目匹配的行,然后比较 therr ids

例如

select distinct id from table1 where id not in (
  SELECT ID
  FROM table1
  WHERE Product IN ('Savings', 'Chequing')
)
于 2013-09-12T20:15:27.030 回答
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
)

Demo

值得一读:我应该使用 NOT IN、OUTER APPLY、LEFT OUTER JOIN、EXCEPT 还是 NOT EXISTS?

于 2013-09-12T20:16:09.963 回答