需要帮助MySQL JOIN处理四个表

时间:2010-02-05 08:32:05

标签: mysql

我需要MySQL查询的帮助。这个例子比我实际需要的那个简单得多,但它很相似。这是我的示例表,我试图让它易于阅读。

posts
---------------
id           date
1            2010
2            2010 

posts_tags
---------------
post_id      tag_id
1            1
1            2
1            3

tags
--------------
id       tagname
1        foo
2        bar
3        hello

tags_active
--------------
tag_id   active
1        yes
2        no
3        no

基本上我需要做的是返回属于帖子ID 1的有效标签。在这种情况下,它应该返回 foo

以下是我对此类查询的尝试:

SELECT tags.tagname
FROM posts
    JOIN posts_tags ON posts.id = posts_tags.post_id
    JOIN tags ON posts_tags.tag_id = tags.id
    JOIN tags_active ON tags.id = tags_active.id
WHERE tags_active.active = 'yes'

不幸的是,似乎没有用。请指教,谢谢你的时间。

2 个答案:

答案 0 :(得分:2)

您的上次加入时间是tags.id = tags_active.id

应为tags.id = tags_active.tag_id

SELECT tags.tagname
FROM posts
    JOIN posts_tags ON posts.id = posts_tags.post_id
    JOIN tags ON posts_tags.tag_id = tags.id
    JOIN tags_active ON tags.id = tags_active.tag_id
WHERE tags_active.active = 'yes'

答案 1 :(得分:2)

您上一次加入时出现轻微错误 - 在这种情况下,明确的INNER加入可能是值得的。

SELECT
    tags.tagname
FROM
    posts
INNER JOIN
    posts_tags ON posts.id = posts_tags.post_id
INNER JOIN
    tags ON posts_tags.tag_id = tags.id
INNER JOIN
    tags_active ON tags.id = tags_active.tag_id
WHERE
    tags_active.active = 'yes'