Mysql 这两个查询如何组合?

Mysql 这两个查询如何组合?,mysql,Mysql,对不起,问题的标题不好,我不确定用什么术语来描述我的问题 我有两张桌子: 职位: p_id | p_author | p_text 发表评论: pc_id | pc_p_id | pc_author | pc_text 每个评论的pc_p_id对应于帖子的p_id 我想选择: 来自特定作者的所有帖子的p_id和p_文本 对应帖子的评论数 假设1是作者,我可以用这样的查询完成第一部分: SELECT p_id, p_text FROM posts WHERE p_author = 1 假设1

对不起,问题的标题不好,我不确定用什么术语来描述我的问题

我有两张桌子:

职位:

p_id | p_author | p_text
发表评论:

pc_id | pc_p_id | pc_author | pc_text
每个评论的pc_p_id对应于帖子的p_id

我想选择:

来自特定作者的所有帖子的p_id和p_文本 对应帖子的评论数 假设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_文本,以及相应帖子的评论数

我尝试使用如下所示的左连接,但它给了我一个语法错误:

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小提琴:

以下是进行嵌入式选择的编辑版本:

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

我在您的小提琴中验证了这一点,当您想要左表中的所有行,但右表中可能没有相应的行时,可以使用LEFT_JOIN。否则,您需要直接的内部联接。另外,当使用诸如COUNT之类的聚合函数时,如果选择了任何非聚合列,则必须使用GROUP BY子句。

选择p.p\u id、p.p\u text、将pc.pc\u id作为CountFROM posts p、post\u comments pcWHERE pc.pc\u p\u id=p.p\u id和p.p\u author=1和pc.pc\u p\u id=12

是否可以设置一个表?这两个表之间的关系如何?p_作者和pc_作者相等吗?@Melanie-我更新了我的问题。每个评论的pc_p_id对应于帖子的p_id。不,p_author和pc_author不是等价的。不过,右侧表格中可能没有行。这就像一个博客,作者可以发表文章,然后其他人可以发表评论。一篇文章可能有也可能没有相应的评论。那么左连接是合适的,但仍然需要一个group by子句。谢谢,这种方式很有效,但它不会返回没有评论的文章。SQL FIDLE:只需像这样简单地更改为左外连接。它几乎可以工作,但当评论数实际上为0时,第二篇文章返回1。所以有些东西工作不正常。啊,好吧,使用LEFT OUTER,您将得到与comments表中的任何行都不匹配的空行。这就是它应该如何工作。因此,如果您想要所有post行和post注释计数,则需要为此执行嵌入式选择。我将尝试编辑这篇文章来展示这一点。
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