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

标签 mysql join

编辑 - 很抱歉,我第一次没有包含正确的信息!

我有以下两个表:

table 1
+----+-------+-------+
| id | model | color |
+----+-------+-------+
|  1 | 111AA | red   |
|  2 | 222BB | blue  |
|  3 | 333CC |       |
|  4 | 444DD | green |
+----+-------+-------+

table 2
+----+-------+-------+
| id | model | quant |
+----+-------+-------+
|  6 | 111AA |     2 |
|  7 | 222BB |     5 |
|  8 | 222BB |     3 |
+----+-------+-------+

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

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

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

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'

但是,这不起作用。

非常感谢任何帮助。

谢谢!

最佳答案

要接收预期的表,请运行以下 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 列上进行联接,而不是在模型名称上进行联接。

关于MYSQL:返回一个表中的所有行以及另一个表中匹配行的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35930726/

相关文章:

php - MySQL 查询 Laravel Eloquent

Mysql多表连接特例

mysql - 我如何告诉 MySQL 优化器使用派生表上的索引?

sql - 哪个提供更快的查询?哪个更干净?加入或加入

mysql - 如何将两个表连接到一列

mysql - 在 SQL 中传递值

php - 将图像上传到 MySQL 数据库时图像损坏

MySQL,将第一个单词移到最后一个

java - 试图将数据加载到 TableView 中的 resultSet Date 上出现 NullPointerException

php - 尝试将 mysql_* 重写为 pdo