我有一个 am:n(多对多)关系表。基本上,如果我选择一个article_id
,我想返回所有其他tag_id
与所选 相同的文章article_id
。
| article_id | tag_id |
|------------|--------|
| 1 | 2 |
| 1 | 11 |
| 2 | 5 |
| 4 | 6 |
| 4 | 11 |
| 12 | 9 |
| 14 | 9 |
| 14 | 15 |
| 14 | 17 |
| 18 | 1 |
| 20 | 8 |
| 41 | 13 |
| 49 | 9 |
| 50 | 12 |
| 60 | 18 |
| 75 | 9 |
| 75 | 10 |
| 75 | 11 |
所以,如果我选择article_id 75,我需要输出所有包含tag_id 9、10 和 11的文章
| article_id | tag_id |
|------------|--------|
| 1 | 11 |
| 4 | 11 |
| 12 | 9 |
| 14 | 9 |
| 49 | 9 |
我创建了以下查询,它看起来有效,但我想确认一下。有没有更好的办法?
SELECT aj2.article_id, aj2.tag_id
FROM article_tag_join aj
JOIN article_tag_join aj2 ON aj2.tag_id = aj.tag_id
WHERE aj.article_id = 75 AND aj2.article_id <> 75
您可以稍微更改查询,以便在连接内完成排除:
这可能会提供更好的性能,但始终值得将其与现有查询进行比较。如果我有两个导致相同执行计划的查询,我会选择最容易维护的那个。