postgresql在列上选择distinct,但仅限于另一列不包含值

时间:2018-04-18 18:31:48

标签: sql postgresql

所以我想说有这个

id some_id field_name
0  200     john
1  200     dude
3  200     man
4  201     kevin
5  201     dude
6  201     man
7  203     lisa
8  203     dudet
9  203     not man

我想要一个独特的some_id,其中一个字段项不等于kevin(或我认为不需要的任何其他可能的字段)。 Im寻找的输出是:

200
203

当我想根据现有的特定field_name值过滤掉some_id时,我已经能够轻松获得所有独特的some_id。

1 个答案:

答案 0 :(得分:0)

您可以使用NOT EXISTS

SELECT DISTINCT some_id
FROM table t
WHERE NOT EXISTS (SELECT * FROM table t2 
                  WHERE field_name = 'kevin' AND t.some_id = t2.some_id);

EXCEPT

SELECT some_id
FROM table 
EXCEPT
SELECT some_id
FROM table
WHERE field_name = 'kevin';