Mysql 从多对多关系的末端选择数据

Mysql 从多对多关系的末端选择数据,mysql,sql,join,Mysql,Sql,Join,我有一个帖子数据库,每个帖子都有标签。这些表分别命名为Posts和Tags。我还有第三个表,名为Posts\u Tags,它维护这两个表之间的多对多关系 为此,我的帖子和我的标签表都有一个id列。因此,我的Posts\u Tags表既有一个postid列,也有一个tagid列来存储映射 例如,我正在查询标题中有“class”一词的所有帖子。我可以通过以下查询轻松做到这一点: SELECT * FROM Posts WHERE title LIKE '%{class}%' 但是,现在我想查询所有

我有一个帖子数据库,每个帖子都有标签。这些表分别命名为
Posts
Tags
。我还有第三个表,名为
Posts\u Tags
,它维护这两个表之间的多对多关系

为此,我的帖子和我的标签表都有一个
id
列。因此,我的
Posts\u Tags
表既有一个
postid
列,也有一个
tagid
列来存储映射

例如,我正在查询标题中有“class”一词的所有帖子。我可以通过以下查询轻松做到这一点:

SELECT * FROM Posts WHERE title LIKE '%{class}%'
但是,现在我想查询所有的帖子,这些帖子的标题中不仅有“class”,而且还有“Java”标记。我可以在两个单独的查询中实现这一点,首先获取Java标记的id:

SELECT id FROM Tags WHERE name='Java'
然后我可以将其插入我的第一个查询中,如下所示:

SELECT     Posts.* 
FROM       Posts 
INNER JOIN Posts_Tags 
        ON Posts.id=Posts_Tags.postid 
WHERE      Posts_Tags.tagid='$java_tag_id' 
           AND title LIKE '%{class}%'

然而,我知道我可以在一个查询中做到这一点,我只是不知道如何做到。当我只做一个连接时,我仍然需要考虑很多连接,而在同一个查询中做多个连接会让我头晕目眩。我应该如何构造查询以执行此操作?

太好了,谢谢。我想我有点想过头了,呵呵。无论如何,这是完美的作品!
    SELECT p.* 
      FROM Posts p 
      JOIN Posts_Tags pt
        ON pt.postid = p.id
      JOIN tags t
        ON t.id = pt.tagid
     WHERE t.tag='java'
       AND p.title LIKE '%{class}%';
SELECT 
    p.*
FROM posts as p 
INNER JOIN Posts_Tags pt ON pt.post_id = p.id
INNER JOIN  Tags as t ON pt.tags_id = t.id
WHERE   t.tag='java'
AND p.title LIKE '%keyword%';