我有两个表,分别名为tags
和things
,它们都包含一个id
和一个name
列。然后,还有第三个表格:thing_tags
。其中有数据是这样的:MySQL获取具有多个标记ID的事物的唯一列表
╔═══════╤═════════╗
║ tagid │ thingid ║
╟───────┼─────────╢
║ 6 │ 1 ║
║ 6 │ 2 ║
║ 12 │ 1 ║
║ 12 │ 2 ║
║ 12 │ 3 ║
║ 15 │ 4 ║
║ 16 │ 4 ║
║ 21 │ 5 ║
╚═══════╧═════════╝
的2列有各表的id
列外键引用。
我希望做的是得到的同时具有标签#6,#12,独特的东西ID的列表所以在这种情况下,结果将是标识1
和2
,但不3
,然后在things
表中查找具有这些ID的元素并检索它们。这里是我当前的SQL查询:
SELECT th.*
FROM thing_tags t
LEFT JOIN things th ON t.id = th.id
WHERE t.id IN (12,6)
ORDER BY th.name ASC
这不工作,我希望它的方式,因为它也给了我第三次生命从表中,并返回正确的结果多次。我如何修改此查询,以便只返回那些绑定到所有指定的tagid
的things
,而不仅仅是一个,最终没有重复的行?
我发布这个问题之前尝试过类似的解决方案,而MySQL返回的错误,指出“LIMIT&AND/OR/IN与子查询不支持这个版本的MySQL“。 AFAIK我正在运行最新版本。 – SeinopSys
@ DJDavid98感谢您的回复。我用另一个选项更新了我的答案。请让我知道这是否可行 – Akshay
您在两种解决方案中都使用'IN'和子查询。我的MySQL服务器不允许。 – SeinopSys