【问题标题】:Left outer join sql not working左外连接sql不起作用
【发布时间】:2014-12-27 16:11:15
【问题描述】:

在我的 Android 应用程序中,我有一个包含两行感兴趣的数据库。

 table1          table2     
 |_id | name |   |_id | table1_id |amount

我希望有一个查询,它返回表 1 中的每一行 augmented 以及 table2 中每一行的行量总和,其中 table1_id 对应于表 1 中的 _id。这是到目前为止我想出了什么:

SELECT table1._id, table1.name, SUM(amount) 
FROM table1 LEFT OUTER JOIN table2 
USING(table1._id,table2.table1._id) ;

这一行返回 SUM(amount) 列中为 0 的行,当表 1 完全为空时也是如此 (结果 |-|-|0| )。当table1 为空时,我希望结果完全为空。当 table1 中的特定行没有对应关系时,我希望它们只增加 0。

对改进查询有什么想法吗?

【问题讨论】:

    标签: android mysql sql sqlite select


    【解决方案1】:

    您可以在加入前group by

    SELECT          t1._id, t1.name, t2.sum_amount
    FROM            table1 t1
    LEFT OUTER JOIN (SELECT   table1_id, SUM(amount) AS sum_amount
                     FROM     table2 
                     GROUP BY table1_id) t2 
                 ON t1._id = t2.table1_id;
    

    【讨论】:

    • 为什么是之前而不是之后?
    【解决方案2】:
    SELECT 
        table1._id, table1.name, SUM(IFNull(amount,0)) 
    FROM
        table1 LEFT OUTER JOIN table2 
    ON 
        table1._id = table2.table1._id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多