我的数据库中有下表:
ID name
1 x
2 x
3 y
1 y
1 z
现在,我只想选择同时具有“ x”和“ y”值的标签名称的该对象(ID)。在这种情况下,这将仅是ID = 1的记录,因为寻求的值集(“ x”和“ y”)是该记录可能的名称集(“ x”,“ y”和“ z”)的子集。
如何编写一个SQL查询?
感谢帮助 :)
一种方法使用聚合:
select id
from t
where name in ('x', 'y')
group by id
having count(*) = 2;
如果您关心性能,则可以将其与以下各项进行比较:
select id
from t tx join
t ty
on tx.id = ty.id and tx.name = 'x' and ty.name = 'y';
第一个版本更容易归纳为更多标签。在某些情况下,第二个可能有更好的性能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句