从一个没有另一个类似但不满足条件的表中选择行

时间:2019-02-21 13:57:51

标签: sql postgresql

对不起,标题很乱,但我不知道如何在没有示例的情况下进行解释。假设我有一张桌子:

ID | A
-------
1  | X
1  | Y
2  | X
3  | X

我想选择给定ID的所有行,其中A列中的值只有X,而不是Y。因此在这种情况下,我将得到:

ID | A
-------
2  | X
3  | X

我不知道如何构造这样的查询。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用not exists

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.id = t.id and t2.a <> 'X'
                 );

答案 1 :(得分:0)

下面是一种方法-

select * from table where id in (select id from table group by id having count(*)=1) and id='X'

答案 2 :(得分:0)

您可以进行聚合:

SELECT ID, 'X' AS A
FROM table t
GROUP BY ID
HAVING MIN(A) = MAX(A) AND MIN(A) = 'X';

如果需要所有列,则还可以使用NOT EXISTS

SELECT t.*
FROM table t
WHERE t.A = 'X' AND -- have only value "X" 
      NOT EXISTS (SELECT 1 FROM table t1 WHERE t1.ID = t.ID AND t1.A = 'Y');