Mysql 对于特定的唯一id,所有值都相同的查询
我在下面提到了数据库:Mysql 对于特定的唯一id,所有值都相同的查询,mysql,sql,Mysql,Sql,我在下面提到了数据库: id Value 1 A 1 B 1 B 2 A 2 B 3 B 3 B 我想 这些id仅在所有与这些id相对的值都是B.i.e id 3的情况下 使用where-id=一个while查询,但它给出了所有id,其中两个值都存在。 您可以使用group by并具有: 如果您有一个单独的ID表,这可能会更快: select i.id from ids i where not exists (select 1 from idvalues iv w
id Value
1 A
1 B
1 B
2 A
2 B
3 B
3 B
我想
这些id仅在所有与这些id相对的值都是B.i.e id 3的情况下
使用where-id=一个while查询,但它给出了所有id,其中两个值都存在。
您可以使用group by并具有:
如果您有一个单独的ID表,这可能会更快:
select i.id
from ids i
where not exists (select 1 from idvalues iv where iv.id = i.id and iv.value <> 'B') and
exists (select 1 from idvalues iv where iv.id = i.id and iv.value = 'B'); -- at least one B
这可以利用idvaluesid、value上的索引。您可以使用group by并具有:
如果您有一个单独的ID表,这可能会更快:
select i.id
from ids i
where not exists (select 1 from idvalues iv where iv.id = i.id and iv.value <> 'B') and
exists (select 1 from idvalues iv where iv.id = i.id and iv.value = 'B'); -- at least one B
这可以利用idvaluesid,value上的索引。第一个查询还应该使用idvaluesid,value上的索引。事实上,第一个查询可以将其用作覆盖索引。@RaymondNijland。这当然是真的。让MySQL使用索引进行聚合对我来说似乎真的很麻烦——除非最新版本使这一点变得更简单。第一个查询还应该使用idvaluesid,value上的索引。事实上,第一个查询可以将其用作覆盖索引。@RaymondNijland。这当然是真的。让MySQL使用索引进行聚合对我来说似乎真的很麻烦——除非最新的版本使这变得更简单。