mysql - 通过 2 个连接获得比预期更高的结果

标签 mysql sql

这是我的查询:

SELECT  p.id, COUNT(c.id) AS comments, COUNT(a.id) AS answers
FROM posts_tbl AS p
LEFT JOIN post_reply_tbl AS c ON c.post_id = p.id AND c.type IN (1,3)
LEFT JOIN post_reply_tbl AS a ON a.post_id = p.id AND a.type = 2
GROUP BY p.id

我应该得到的结果是:

ID  Answers Comments
1   3       4
2   1       1
3   0       1

但我得到的是:

ID  Answers Comments
1   12      12
2   1       1
3   0       1

当我只使用 LEFT JOIN 中的 1 个时,无论使用哪一个,它都会为我提供正确数量的答案/评论(取决于我使用的 LEFT JOIN)。但是当我同时使用它们时,它给了我第二个结果。

使用 * 时的示例结果数据:

id  username    date                subject                     year    brand   model   type    bodywork                    text                                                    image       chassis         id  post_id answer_id   username        text    date                type    id  post_id answer_id   username        text            date                type
1   Sinan Samet 2013-02-18 20:18:19 Dit is een test onderwerp   2006    Audi    A4  TFSI 2.0    TFSI 2.0 QUATTRO - 200pk    Lorem ipsum dolor sit amet consectetur adipiscing ...   test.jpg    345215453213425 5   1       NULL        Sinan Samet     Test    2013-02-26 09:19:22 1       1   1       NULL        Jan Willem      Bla             2013-02-26 14:14:17 2
1   Sinan Samet 2013-02-18 20:18:19 Dit is een test onderwerp   2006    Audi    A4  TFSI 2.0    TFSI 2.0 QUATTRO - 200pk    Lorem ipsum dolor sit amet consectetur adipiscing ...   test.jpg    345215453213425 5   1       NULL        Sinan Samet     Test    2013-02-26 09:19:22 1       2   1       NULL        Peter           Nee toch niet   2013-02-26 15:12:26 2
1   Sinan Samet 2013-02-18 20:18:19 Dit is een test onderwerp   2006    Audi    A4  TFSI 2.0    TFSI 2.0 QUATTRO - 200pk    Lorem ipsum dolor sit amet consectetur adipiscing ...   test.jpg    345215453213425 5   1       NULL        Sinan Samet     Test    2013-02-26 09:19:22 1       3   1       NULL        Homer Simpson   Doh!            2013-02-26 14:33:18 2
1   Sinan Samet 2013-02-18 20:18:19 Dit is een test onderwerp   2006    Audi    A4  TFSI 2.0    TFSI 2.0 QUATTRO - 200pk    Lorem ipsum dolor sit amet consectetur adipiscing ...   test.jpg    345215453213425 6   1       NULL        Bart Simpson    Yo      2013-02-26 08:38:37 1       1   1       NULL        Jan Willem      Bla             2013-02-26 14:14:17 2

最佳答案

select
    p.id,
    COALESCE(c.comments,0) AS comments,
    COALESCE(a.answers, 0) AS answers
from
    posts_tbl as p
    left join (
        select post_id, count(*) as comments
        from post_reply_tbl
        where type in (1,3)
        group by post_id
    ) as c on p.id = c.post_id
    left join (
        select post_id, count(*) as answers
        from post_reply_tbl
        where type = 2
        group by post_id
    ) as a on p.id = a.post_id
order by id ;

关于mysql - 通过 2 个连接获得比预期更高的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15096891/

相关文章:

php - mysql分页结果

sql - 用于 sql 表中的 "Status"列的类型

mysql - mysql Join 上的奇怪索引事件

java - 在 SQL 或 Java 中过滤数据?

mysql - 我的 CakePHP HABTM 查询出了什么问题?

mysql - 添加新行created_at字段填充-3小时差异

mysql - Perl MySQL 全文搜索

SQL Server : How to get/save result of "statistics profile"

sql - 计算和使用子查询的列平均值

php - 检索 MySQL 值并打印它们