我用这些模型表简化了多对多关系案例 。如何通过在相同关系上筛选来查询多对多联接?
Posts:
------------------------------
| id | title | body |
------------------------------
| 1 | One | text1 |
| 2 | Two | text2 |
| 3 | Three | text3 |
------------------------------
Tags:
-------------------
| id | name |
-------------------
| 1 | SQL |
| 2 | GLSL |
| 3 | PHP |
-------------------
Post_tags:
------------------------------
| id | p_id | t_id |
------------------------------
| 1 | 1 | 1 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
| 3 | 3 | 2 |
------------------------------
我的目标是查询与特定的标签,我有没有问题的帖子,但我也想显示所有相关的标签后不只是一个我查询了。 我的查询看起来是这样的:
SELECT p.Title, p.Body, t.name
FROM Posts p
LEFT JOIN Post_tags pt ON p.id = pt.p_id
LEFT JOIN Tags t ON t.id = pt.t_id
WHERE t.name LIKE '%SQL%'
这得到的职位与“SQL”的标签,但它只能加入与标签在那里发现了“SQL”字符串的职位表中,因此其他标签“PHP”与帖子相关联的未加入。
很明显,问题是我加入了WHERE子句的表,但是如何在一个查询中解决这个问题或者(最好是用子查询)?
目前,我在我的应用程序中进行了两个单独的查询,一个用于选择匹配的帖子,另一个用于检索完整的发布数据。这不是很有效,也似乎是一个蹩脚的解决方案,我还没有找到更好的,所以我决定问StackOverflow社区。
感谢您的时间回答我的问题,您的解决方案解决了这个问题,但我接受@Micheal的,因为它提供了更多的信息。 – dropout