SQL -选择表中所有带有attribute标签的id



我有以下数据库表:

条目:

  • id
  • <
  • 名称/gh>
  • {其他不重要的属性}

标记:

  • id
  • 标记

我想编写一个查询,从Entries表中选择所有标记在某种列表中的所有条目。例如,假设条目A有标签[tag1, tag2, tag3]。我想选择Entries表中具有[tag1,tag2,tag3]标签的所有实体。我试过使用INNER JOIN,但这似乎不起作用-我认为INNER JOINs是用来连接两个db表。

这是我尝试过的查询:SELECT entries.name, entries.name。id FROM entries INNER JOIN tags ON tags。tag IN ('tag1', 'tag2',…)

可以创建三个内部连接:

SELECT e.* FROM Entries e 
INNER JOIN Tags t1 on e.id = t1.id and t1.tag = 'tag1'  
INNER JOIN Tags t2 on e.id = t2.id and t2.tag = 'tag2'  
INNER JOIN Tags t3 on e.id = t3.id and t3.tag = 'tag3'

如果标签数目不同:

SEELCT * from Entries e 
WHERE e.id in (SELECT id from Tags  
WHERE tag in ('tag1', 'tag2', ...) 
GROUP BY id
HAVING count(*) = x) -- x = Length of the list   

在子查询中,确定带有所有x标记的id,然后选择这些id的条目

您应该基于id连接表,并将标记比较放在where子句

修改后的查询是

SELECT entries.name, entries.id FROM entries INNER JOIN tags ON tags.id = entries.id where tags.tag IN ('tag1', 'tag2', ...)

相关内容

最新更新