1

抱歉,问题标题不佳,我不确定描述我所问内容的正确术语。

我有两张桌子:

帖子:

p_id | p_author | p_text

post_comments:

pc_id | pc_p_id | pc_author | pc_text

每个评论的 pc_p_id 对应于帖子的 p_id。

我要选择:

  1. 来自特定作者的所有帖子的 p_id 和 p_text
  2. 对应帖子的评论数

我可以用这样的查询来完成第一部分(假设“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 小提琴:

http://sqlfiddle.com/#!2/e9b975

4

3 回答 3

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

我在你的小提琴中验证了这一点

于 2013-03-13T18:47:14.130 回答
0

当您想要左侧表中的所有行,但右侧表中可能没有对应的行时,使用 LEFT_JOIN。否则,您需要直接(内部)连接。此外,当使用 COUNT() 之类的聚合函数时,如果您选择了任何非聚合列,则必须使用 GROUP_BY 子句。

于 2013-03-13T18:49:22.040 回答
-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

于 2013-03-13T19:00:40.310 回答