Sql 如果不与其他记录共享列值,请选择一条记录

Sql 如果不与其他记录共享列值,请选择一条记录,sql,Sql,假设我有一张如下表 X | Y | Z _________ 1 A 3 1 B 3 1 C 4 1 B 4 我想查询包含B的记录,但只查询那些包含B且不与特定记录共享公共Z字段值的记录,在本例中为a。因此,理想情况下,查询将返回记录“1 B 4”。您可以使用不存在: select t.* from t where t.y = 'B' and not exists (select 1 from t t2 where t2.z = t.z and t2.

假设我有一张如下表

X | Y | Z
_________
1   A   3
1   B   3
1   C   4
1   B   4

我想查询包含B的记录,但只查询那些包含B且不与特定记录共享公共Z字段值的记录,在本例中为a。因此,理想情况下,查询将返回记录“1 B 4”。

您可以使用
不存在

select t.*
from t
where t.y = 'B' and
      not exists (select 1 from t t2 where t2.z = t.z and t2.y = 'A');

如果索引位于
(z,y)
(y)
上,这可能也是最快的方法。

您可以使用
不存在的方法。

select t.*
from t
where t.y = 'B' and
      not exists (select 1 from t t2 where t2.z = t.z and t2.y = 'A');
由于索引位于
(z,y)
(y)
上,这可能也是最快的方法