我有一张产品表
+------------+---------------+---------------+
| ProductCod | unitPrice | name |
+------------+---------------+---------------+
| 1 | 30 | some |
| 2 | 20 | poor |
| 3 | 10 | example |
+------------+---------------+---------------+
另一种是销售(我相信这是不需要的),另一种是注册n..m关系
+------------+----------+------------+
| quantity | sellCode | productCod |
+------------+----------+------------+
| 3 | 1 | 1 |
| 5 | 1 | 2 |
| 4 | 2 | 2 |
| 4 | 2 | 3 |
| 4 | 2 | 3 |
+------------+----------+------------+
如何选择产品列表以及在所有登记处销售了多少产品?
我想要这样的东西:
+---------+------+
| name | sold |
+---------+------+
| some | 3 |
| poor | 9 |
| example | 8 |
+---------+------+
2条答案
按热度按时间bq3bfh9z1#
我们要做的是首先使用productcod公共字段连接两个表。我们使用的是left join,因为可能有一些产品还没有售出。然后我们将按productcod(和name)分组的数量相加。我们必须将它包含在列表中,因为它不是聚合表达式,而且每个productcod都有一个单独的名称。这是正确的,因为产品和销售之间存在一对多的关系。如果存在多对多关系,那么结果将是错误的。
编辑:检查这个SQLFIDLE示例是否有良好的格式。
yv5phkfx2#
在这里使用内部连接更精确。
查询
或
结果
请参见演示http://sqlfiddle.com/#!9/10cd3e/5号