带有多个连接的SQL语句

时间:2009-08-12 19:58:10

标签: sql mysql

我必须诚实地告诉你我不擅长数据库查询,这个问题可能很简单。

我有三张桌子

Post
    ID
    entry
Category
    ID
    name
CategoryBinding
    ID
    postID
    categoryID

我的正常查询是将所有帖子都包含在

SELECT * FROM `Post` AS `p` 
LEFT JOIN `CategoryBinding` AS `cb` ON p.ID = cb.postID 
LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID

返回的查询类似于:

ID    entry    ID    name    ID    postID    categoryID
1     entry1    1     php      1      1            1
1     entry1    2     asp      1      1            2

2     entry2    1     php      1      2            1

3     entry3    null  null    null    null        null

现在我想获取属于特定类别ID的所有帖子,其中包含帖子的所有类别 I.E我希望获得与第一个查询中相同的内容但仅限于属于某个类别的帖子。 现在我只想获得属于asp类别的帖子。那是

ID    entry    ID    name    ID    postID    categoryID
1     entry1    1     php      1      1            1
1     entry1    2     asp      1      1            2

你知道我怎么做吗?

如果有人帮助我,我将非常感激,因为这更像是“为我做的工作”问题。

1 个答案:

答案 0 :(得分:3)

SELECT * 
FROM `Post` AS `p` 
LEFT JOIN `CategoryBinding` AS `cb` ON p.ID = cb.postID 
LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID
INNER JOIN `Post` AS `p2` ON p.id = p2.id
WHERE p.id in
(
    SELECT p2.id
    FROM `Post` as `p2`
    LEFT JOIN `CategoryBinding` AS `cb` ON p2.ID = cb.postID 
    LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID
    WHERE c.id = @SomeCategory
)

好的,最后一枪。

这将返回重复的行,只需添加一个组即可。