MYSQL:返回一个表中的所有行以及另一个表中匹配行的总和

时间:2016-03-11 01:38:48

标签: mysql join

编辑 - 我很抱歉,但我第一次没有提供正确的信息!

我有以下两个表:

+----+-------+-------+------+
| id | model | color | quant|
+----+-------+-------+------+
|  1 | 111AA | red   |      |
|  2 | 222BB | blue  |    8 |
|  4 | 444DD | green |      |
+----+-------+-------+------+

我需要一个查询,它将从表1中获取颜色列不为空的所有行以及表2中与特定模型匹配的列数量的总和(在给出的示例中,model =&#39 ; 222BB')生成下表:

SELECT t1.id, t1.model, t1.color, SUM(t2.quant) 
FROM table1 t1 LEFT OUTER JOIN table2 t2 
ON t1.id = t2.id 
WHERE t1.color != '' AND t2.model = '222BB'

这是我到目前为止所尝试的:

{% set f = lambda... %}

但是,这没有用。

非常感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:1)

要接收预期的表,请运行以下SQL查询:

SELECT t1.id, t1.model, t1.color, IF(t2.model = '222BB', SUM(t2.quant), NULL) 
  FROM table1 t1 
   LEFT JOIN table2 t2 ON t1.model = t2.model 
  WHERE t1.color != '' 
  GROUP BY t1.model

结果与您的表格相同。但我认为最好更新设计以在ID列上进行连接,而不是模型名称。

答案 1 :(得分:0)

在Sql中,你不应该写!=或== with null。强烈建议您使用 IS NULL IS NOT NULL 子句。

http://www.tutorialspoint.com/sql/sql-null-values.htm

**选择a.model,b.total from(从table1选择模型,其中color不为null)a,(选择模型,从table2逐模型得到sum(quant)total)b其中a.model = b。模型; **

答案 2 :(得分:0)

试试这个,

select t1.id, t1.model,t1.color,sum(t2.quant)
from table1 t1
   left outer join table2 t2 on (t1.model = t2.model and t1.color <> ‘’)
group by t1.model