我有以下数据库表:
条目:
- id <
- 名称/gh>
- {其他不重要的属性}
标记:
- id
- 标记
我想编写一个查询,从Entries
表中选择所有标记在某种列表中的所有条目。例如,假设条目A
有标签[tag1, tag2, tag3]
。我想选择Entries
表中具有[tag1,tag2,tag3]
标签的所有实体。我试过使用INNER JOIN
,但这似乎不起作用-我认为INNER JOIN
s是用来连接两个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', ...)