我必须老实告诉你,我不擅长数据库查询,这个问题可能很简单。
我有三张桌子
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/