SQL - 标记搜索查询

时间:2016-05-14 12:41:46

标签: sql sqlite search tags

我的数据库中有以下表格:

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查询?
感谢您的帮助:)

1 个答案:

答案 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';

第一个版本更容易推广到更多标签。在某些情况下,第二种可能会有更好的表现。