【发布时间】:2015-08-17 16:50:53
【问题描述】:
我有 2 个名为 tags 和 things 的表,它们都包含一个 id 和一个 name 列。然后,还有第三张表:thing_tags。其中有这样的数据:
╔═══════╤═════════╗
║ tagid │ thingid ║
╟───────┼─────────╢
║ 6 │ 1 ║
║ 6 │ 2 ║
║ 12 │ 1 ║
║ 12 │ 2 ║
║ 12 │ 3 ║
║ 15 │ 4 ║
║ 16 │ 4 ║
║ 21 │ 5 ║
╚═══════╧═════════╝
这两列具有对各自表的id 列的外键引用。
我想要做的是获取具有标签#6 和#12 的唯一事物ID 的列表,因此在这种情况下,结果将是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
这不能按我想要的方式工作,因为它还给了我表格中的第三件事,并多次返回正确的结果。我该如何修改这个查询,以便只返回那些绑定到所有指定 tagids 的 things,而不仅仅是一个,最后没有重复的行?
【问题讨论】: