对不起,标题很乱,但我不知道如何在没有示例的情况下进行解释。假设我有一张桌子:
ID | A
-------
1 | X
1 | Y
2 | X
3 | X
我想选择给定ID的所有行,其中A列中的值只有X,而不是Y。因此在这种情况下,我将得到:
ID | A
-------
2 | X
3 | X
我不知道如何构造这样的查询。任何帮助将不胜感激。
答案 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');