SQL查询INNER JOIN三个用表
问题描述:
有这三个表:SQL查询INNER JOIN三个用表
- 帖子
- posts_replies
- 喜欢
该查询返回我的帖子及其回复数无一不精。 SELECT posts.title,posts.num,posts.status,posts.category,posts.content,posts.member_num,COUNT(posts_replies.blyrb_num)AS计数
FROM posts_replies
INNER JOIN posts ON (posts_replies.blyrb_num = posts.num)
WHERE posts.status =1
AND posts.access = 'Public'
GROUP BY posts.num
ORDER BY count DESC
LIMIT 50
记录该查询返回的是:47
这是一个更新的查询,我想拉动每个帖子的回复的喜欢次数。
SELECT posts.title, posts.num, posts.status, posts.category, posts.content, posts.member_num,
COUNT(posts_replies.blyrb_num) AS count,
COUNT(likes.comment_num ) AS likes_count
FROM posts_replies
INNER JOIN posts ON (posts_replies.blyrb_num = posts.num)
INNER JOIN likes ON (likes.comment_num = posts_replies.num)
WHERE posts.status =1
AND posts.access = 'Public'
GROUP BY posts.num
ORDER BY count DESC
LIMIT 50
此查询返回的是喜欢的数量好,但不包括那些没有喜欢的记录。 因此,此查询返回的记录是:40
我想包括每个回复的Like Count,即使它有0个喜欢。
任何帮助?
谢谢
答
使用的LEFT JOIN
代替INNER JOIN
可能会帮助你在这里
SELECT posts.title, posts.num, posts.status, posts.category,
posts.content,posts.member_num,
COUNT(posts_replies.blyrb_num) AS count,
COUNT(likes.comment_num ) AS likes_count
FROM posts_replies
INNER JOIN posts ON (posts_replies.blyrb_num = posts.num)
LEFT JOIN likes ON (likes.comment_num = posts_replies.num)
WHERE posts.status = 1
AND posts.access = 'Public'
GROUP BY posts.num
ORDER BY count DESC
LIMIT 50
的LEFT JOIN
想法是匹配行,即使没有人会在右侧匹配。 INNER JOIN
只适用于双方都有行的情况。 :)
+0
哇这工作就像一个巧克力,谢谢你的人! :d – 2013-02-24 17:43:09
左连接不内连接。如果你想要它是否匹配 – 2013-02-24 17:41:12
如果你想从没有匹配的表中得到行,你需要一个左连接或右连接,这取决于你想从哪里返回空记录。 – steoleary 2013-02-24 17:42:01
谢谢@Tony-Hopkinson和steoleary,你们是对的。 – 2013-02-24 17:52:19