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)
上,这可能也是最快的方法