我有一个产品表
+------------+---------------+---------------+ | ProductCod | unitPrice | name | +------------+---------------+---------------+ | 1 | 30 | some | | 2 | 20 | poor | | 3 | 10 | example | +------------+---------------+---------------+
另一种SALES(我认为这是不需要的)和其他一些注册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 | +---------+------+
答案 0 :(得分:3)
在这里使用INNER JOIN更准确。
查询
SELECT
products.name
, SUM(sales.quantity) AS sold
FROM
products
INNER JOIN
sales
USING(productCod)
GROUP BY
products.name
ORDER BY
products.ProductCod ASC
或
SELECT
products.name
, SUM(sales.quantity) AS sold
FROM
products
INNER JOIN
sales
ON
products.productCod = sales.productCod
GROUP BY
products.name
ORDER BY
products.ProductCod ASC
结果
| name | sold |
|---------|------|
| some | 3 |
| poor | 9 |
| example | 8 |
答案 1 :(得分:1)
select p.Name, sum(s.Quantity) as sold
from Products p
left join Sales s on p.ProductCod = s.ProductCod
group by p.ProductCod, p.Name;
我们要做的是首先使用productCod公共字段连接两个表。我们正在使用LEFT join,因为可能有些产品根本没有售出。然后,我们将按productCod(和Name)分组的数量相加(由于不是聚合表达式,并且每个productCod有一个Name),因此必须将其包括在列表中。这是正确的,因为产品和销售之间存在一对多的关系。如果存在多对多关系,那么结果将是错误的。
编辑:选中此SQLFiddle sample以获得良好的格式。