【问题标题】:Return all the rows even the joined table has empty results即使连接表的结果为空,也返回所有行
【发布时间】:2014-09-07 15:37:52
【问题描述】:

在我的表 1 中,我有类似的东西

name     |  age  
George      42
Bob         30
Ken         23   

在我的表 2 中,我有这样的东西,这是我为每个人存储投票的地方。

name    |   votes  | 
George       1
Ken          1
George       1
George       1
Ken          1

我的目标是合并 2 个表,并返回表 1 中的所有行,即使它在表 2 中不存在。

想要的结果:

name     |  age   |  total_votes
George      42       3
Bob         30       0
Ken         23       2

但是我得到了:

name     |  age   |  total_votes
George      42       3
Ken         23       2

我尝试过类似的方法

SELECT `table_1`.*, coalesce(COUNT(`table_2`.votes), 0) AS total_votes
FROM `table_1`
LEFT JOIN `table_2`
ON `table_1`.name = `table_2`.name

【问题讨论】:

    标签: php sql join rows multiple-columns


    【解决方案1】:

    您可以执行以下操作之一: 1)使用右连接而不是当前的左连接。 或者 2) 在连接表达式中交换 table1 和 table2 位置,例如: 来自table_2 左加入table_1

    【讨论】:

    • 我也这样做了,结果一样
    • 你只做了其中一两个吗?如果你同时做 1 和 2,你会得到相同的结果,但如果你只做其中一个,我认为它会起作用。
    【解决方案2】:

    试试这个。这适用于 MS Access ,我认为这也适用于您的,只需将查询转换为 SQL:

    SELECT Table1.name, First(Table1.age) AS age, Count(Table2.Votes) AS totalVotes 
    FROM Table1 LEFT JOIN Table2 ON Table1.name = Table2.name
    GROUP BY Table1.name;
    

    Left Join table1 to table2 以便 table1 中的所有条目,即使其对应的数据为空,也将被包括在内。 GROUP BY 您的查询按名称,以便按名称计票。

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 2021-03-15
      相关资源
      最近更新 更多