当一行在另一个表中匹配时排除一个组

时间:2014-11-13 10:58:43

标签: sql postgresql

我有两张桌子:

第一个名为“card”,一列“id”。

| id |
| 1  |
| 2  |
| 3  |
| .. |

第二个表名为“waste”,有两列“card_id”和“waste_type”。

| card_id | waste_type |
|   1     |     1      |
|   1     |     3      |
|   2     |     2      |
|   2     |     1      |

我想只选择没有waste_type = 2

的卡片

查询应如下所示:

SELECT c.id FROM card c
JOIN waste w
ON c.id = w.card_id
WHERE waste_type <> 2

我想要这个结果:

id
1

但我明白了:

id
1
2

我该怎么做?非常感谢你!

1 个答案:

答案 0 :(得分:2)

你应该使用not exists子句。

select c.id
from card c
where not exists (select null from waste w
                  where w.card_id = c.id
                  and w.waste_type = 2)

根据您的查询,我猜您更愿意检索

1
1
2