具有多个联接的SQL语句

具有多个联接的SQL语句

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

我有三张桌子

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的所有帖子,以及帖子放入的所有类别。
即我想得到与第一个查询相同的东西,但仅属于特定类别的帖子。
现在,我只想获取属于asp类别的帖子。那是

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


你知道我该怎么做吗?

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

最佳答案

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
)


好了,最后一枪。

这将返回重复的行,只需将group by添加到您想要的任何内容。

关于sql - 具有多个联接的SQL语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1268376/

10-12 04:56