我的数据库中有以下表格:
ID name
1 x
2 x
3 y
1 y
1 z
现在我想只选择同时具有' x'的对象(ID' s)。并且' y' value s标签名称。在这种情况下,这将仅记录ID = 1,因为设置的搜索值(' x'和' y')是此记录可能的名称集的子集(' x&# 39;,' y'和' z')。
如何编写SQL查询?
感谢您的帮助:)
答案 0 :(得分:2)
一种方法使用聚合:
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';
第一个版本更容易推广到更多标签。在某些情况下,第二种可能会有更好的表现。