需要一些sql帮助(pgsql,更喜欢一般的sql join或subselect语法):
entity (id, name)
tag (id, name)
entity_tag (entity_id, tag_id)
我需要能够使用一组标记ID(如1,2,3)来提供查询。我希望它返回所有连接的标签列表(通过entity_tag表)到具有一个或多个给定标签的实体。喜欢"还有哪些类似的实体标有"共同意义上的。
为此目的,最简单,性能最佳的SQL是什么?
答案 0 :(得分:1)
select distinct t.id, t.name
from
(
select distinct entity_id
from entity_tag
where tag_id in (1, 2, 3)
) e
inner join
entity_tag et using (entity_id)
inner join
tag t on t.id = et.tag_id
子选择获取至少具有一个提供的标记的所有实体。然后将它连接到entity_tag以获取先前子选定实体的所有标记。最后的连接获取这些标签的名称。
答案 1 :(得分:0)
SELECT id FROM tag
WHERE EXISTS
(SELECT id from entity_tag)