【问题标题】:left join and count doesn't work properly in MYSQLleft join 和 count 在 MYSQL 中无法正常工作
【发布时间】:2019-11-28 08:44:43
【问题描述】:

我有两个表名为AB,在这里你可以看到AB

A    |  id   |   title
-------------------------
         1   |    A1
         2   |    A2
         3   |    A3   

B    |  A_id   |   title
-------------------------
         1     |    B1
         1     |    B2
         1     |    B3   

我想要做的是计算B中A_id的数量,我尝试了以下查询:

select A.title as "title",count(title) as "count" from A left join B on A.id = B.A_id

这会给我以下结果:

title  |  count
---------------
  A1   |    3
  A2   |    1
  A3   |    1
  A4   |    1

我需要的是:

title  |  count
---------------
  A1   |    3
  A2   |    0
  A3   |    0
  A4   |    0

【问题讨论】:

    标签: mysql sql join group-by left-join


    【解决方案1】:

    您的查询存在问题:

    1. 您的查询缺少GROUP BY 子句。您似乎正在使用一个 MySQL 版本,其中选项 ONLY_FULL_GROUP_BY 被禁用,因此,MySQL 不会向您抛出适当的错误,而是愉快地执行您的查询。

    2. count(title) 不明确,因为该列存在于两个表中。这应该会产生错误。您实际上想指望来自表B 的列;我会使用B.A_id,以防B 中的某些记录为空title

    考虑:

    select A.title, count(B.A_id) as `count`
    from A 
    left join B on A.id = B.A_id
    group by A.title
    

    旁注:

    • 在 MySQL 中,我建议对标识符使用反引号而不是双引号;这就是 MySQL 的方式

    • A.title as title 是多余的:它等同于 A.title

    【讨论】:

      【解决方案2】:

      通过在计数中添加B.A_id 尝试如下方式

       select A.title as "title",count(B.A_id) as "count" 
      from A left join B on A.id = B.A_id
      group by A.title
      

      【讨论】:

        猜你喜欢
        • 2018-02-21
        • 2015-06-29
        • 1970-01-01
        • 2020-05-17
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多