根据MySQL中的相关表选择数据


Selecting data based on related table in MySQL

我有以下表格:

岗位---------------------id |名称---------------------1|第一篇文章2|另一篇帖子标记---------------------id |名称---------------------1|标签12|标签23|Tag3post_tags---------------------post_id |标签_id---------------------1|21|32|13|2

我正试图写一个查询,(用人类可读的术语)会说"查找所有用标签1或标签2标记的帖子"。

因此,我可以放入多个标签ID,并获得至少有一个标签的帖子列表。

我试过这个:

 SElECT t1.name 
   FROM posts AS t1 INNER JOIN posts_tags AS t2 
     ON t1.id = t2.post_id 
  WHERE t2.tag_id IN(1,2)

但这没有结果。我真的不知道从这里到哪里去。有什么方法可以在一个查询中做到这一点吗?也就是说,不需要先获取帖子,然后循环它们来获取标签?

使用IN运算符:

SELECT post_id
FROM posts_tags
WHERE tag_id IN (1,2,3)

为了避免post_id重复,请使用DISTINCT:

SELECT DISTINCT post_id
...
SELECT 
   t1.post_id 
FROM 
   posts_tags as t1
INNER JOIN 
   posts AS t2 
ON 
   t1.post_id = t2.id    
WHERE 
   t2.tag_id IN(1,2)

通过加入Posts表,您现在可以访问所有的post数据,我想这就是您想要的。

您还必须加入posts_tags表。

 SElECT t1.name FROM posts as t1 INNER JOIN posts_tags as t3 on t3.post_id = t1.id INNER JOIN tags AS t2 ON t2.id = t3.tag_id WHERE t2.id IN(1,2)

SQLFiddle在这里回答。

http://www.sqlfiddle.com/#!2/d785e/5

SELECT posts.name FROM posts LEFT JOIN post_tags ON posts.id = post_tags.post_id WHERE post_tags.tag_id = '1' OR post_tags.tag_id = '2'