Sql 选择一个值而不是另一个值

Sql 选择一个值而不是另一个值,sql,database,Sql,Database,表测试: id cd 1 P 2 P 2 S 3 S 我想写一个查询,只选择cd='S'的行,而不选择cd='S'和cd='p'的行 我会在WHERE子句中使用cd 因此,此场景中的查询将只返回id号3。您可以尝试使用: SELECT * FROM test T WHERE cd = 'S' AND 0=( SELECT COUNT(*) FROM test B WHERE B.cd = 'P' AND B.id = T.id ) 或者

表测试:

id     cd
1      P
2      P
2      S
3      S
我想写一个查询,只选择cd='S'的行,而不选择cd='S'和cd='p'的行

我会在WHERE子句中使用cd

因此,此场景中的查询将只返回id号3。

您可以尝试使用:

SELECT * FROM test T WHERE cd = 'S' AND 0=(
    SELECT COUNT(*) FROM test B WHERE B.cd = 'P' AND B.id = T.id
)
或者,您可以使用“加入”:

SELECT * FROM test A LEFT JOIN test B ON
    A.id = B.id AND
    B.cd = 'P'
WHERE B.cd IS NULL AND A.cd = 'S';

谢谢我设计了一个版本,不存在以及这是更快,但你的回答帮助了我。选择*FROM T,其中cd='S'不存在选择1,其中cd='P'和id=T.id;
SELECT *
FROM <TABLE> 
WHERE CD='S' AND ID NOT IN(SELECT ID FROM <TABLE> WHERE CD='P')