【问题标题】:Mysql count left join group by shows unexpected resultsMysql count left join group by 显示意外结果
【发布时间】:2019-12-13 05:27:53
【问题描述】:

有两张桌子

`main_table`
`id_main`  | `name` 
   1       |  'first one'

supplemental_table

`id_main`  | `value` 
   1       |  'alias 1'    
   1       |  'aka 5'          

我想计算main_table 中的行数(但我需要加入supplemental_table)。

   SELECT COUNT(`main`.`id_main`) FROM `main_table` `main` 
   LEFT JOIN `supplemental_table` `supplemental` 
   ON `main`.`id_main` = `supplemental`.`id_main` 
   WHERE `main`.`name` = 'first one' 
   GROUP BY `main`.`id_main`;

main_table 中只有一行id_main 值为1。我使用GROUP BY。所以期望SELECT COUNT 得到结果1。但我得到supplemental_table 中行数的结果。

这是我所做的http://sqlfiddle.com/#!9/259055/10

代码有什么问题?

【问题讨论】:

    标签: mysql group-by count left-join


    【解决方案1】:

    这里的一个简单解决方法是只计算第一个表中不同的 pk 值:

    SELECT
        COUNT(DISTINCT main.pk)
    FROM main_table main 
    LEFT JOIN supplemental_table supplemental
        ON main.id_main = supplemental.id_main
    WHERE
        main.name = 'first one'
    GROUP BY
        main.id_main;
    

    这里的pkmain_table 表上的主列或其他唯一键。这里的想法是计数不受连接的影响,因为连接的 main_table 侧的每个原始记录仍将被计算其原始次数。

    【讨论】:

    猜你喜欢
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多