对于糟糕的问题标题感到抱歉,我不确定用正确的术语来描述我的要求。
我有两张桌子:
帖子:
p_id | p_author | p_text
post_comments:
pc_id | pc_p_id | pc_author | pc_text
每条评论的pc_p_id对应于帖子的p_id。
我想选择:
我可以用这样的查询做第一部分(假设“1”是作者):
SELECT p_id, p_text FROM posts WHERE p_author = 1
我可以获得这样的特定帖子的评论数量(假设“12”是帖子ID):
SELECT COUNT(*) FROM post_comments WHERE pc_p_id = 12
我的问题是,我如何组合这两个查询,以便获取特定作者的所有帖子的p_id和p_text,以及相应帖子的评论数量?
我尝试使用LEFT JOIN,如下所示,但它给我一个语法错误:
SELECT t1.p_id, t1.p_text, t2.COUNT(*)
FROM posts t1 LEFT JOIN post_comments t2
WHERE t1.p_author = 1 AND t2.pc_p_id = t1.p_id
ORDER BY t1.p_id DESC
这是SQL小提琴:
答案 0 :(得分:1)
SELECT p_id, p_text, count(1)
FROM posts p
JOIN post_comments pc
ON p.p_id = pc.pc_p_id
WHERE p_author = 1
GROUP BY p_id, p_text
以下是执行嵌入式选择的编辑版本:
SELECT p_id, p_text,
(SELECT COUNT(1) FROM post_comments WHERE pc_p_id = p.p_id) AS count
FROM posts p
WHERE p_author = 1
我在你的小提琴中证实了这一点
答案 1 :(得分:0)
如果您想要左侧表中的所有行,则使用LEFT_JOIN,但右侧表中可能没有相应的行。否则你想要一个直(内)连接。此外,当使用像COUNT()这样的聚合函数时,如果选择了任何非聚合列,则必须使用GROUP_BY子句。
答案 2 :(得分:-1)
SELECT p.p_id,p.p_text,count(pc.pc_id)AS Count
FROM posts p,post_comments pc
WHERE pc.pc_p_id = p.p_id
AND p.p_author = 1
AND pc.pc_p_id = 12