大家好,我想为我的案子寻求帮助。
第一个表数据mainproduct
id | barcode | product_name | unit_kg |
====+===============+======================+=========+===
1 | 8995157800257 | Pandan Wangi CF 5kg | 5 |
2 | 8995157800264 | Pandan Wangi CF 10kg | 10 |
3 | 8995157800271 | Pandan Wangi CF 20kg | 20 |
4 | 8995157800288 | Rojolele CF 5kg | 5 |
5 | 8995157800301 | Rojolele CF 20kg | 20 |
6 | 8995157800318 | SR CF 5kg | 5 |
7 | 8995157800325 | SR CF 10kg | 10 |
8 | 8995157800332 | SR CF 20kg | 20 |
第二个表数据detail_order
id | barcode | product_name | pcs_order | date_order |
====+===============+======================+=========+==============+==
1 | 8995157800257 | Pandan Wangi CF 5kg | 5 | 2018-01-01
2 | 8995157800257 | Pandan Wangi CF 5kg | 2 | 2018-01-05
3 | 8995157800257 | Pandan Wangi CF 5kg | 6 | 2018-02-01
4 | 8995157800264 | Pandan Wangi CF 10kg | 4 | 2018-02-02
5 | 8995157800264 | Pandan Wangi CF 10kg | 9 | 2018-02-03
6 | 8995157800271 | Pandan Wangi CF 20kg | 1 | 2018-02-04
7 | 8995157800271 | Pandan Wangi CF 20kg | 2 | 2018-02-05
8 | 8995157800271 | Pandan Wangi CF 20kg | 1 | 2018-02-10
9 | 8995157800288 | Rojolele CF 5kg | 5 | 2018-02-15
10 | 8995157800288 | Rojolele CF 5kg | 3 | 2018-02-16
11 | 8995157800318 | SR CF 5kg | 8 | 2018-02-20
12 | 8995157800318 | SR CF 5kg | 2 | 2018-02-25
13 | 8995157800325 | SR CF 10kg | 10 | 2018-02-28
14 | 8995157800325 | SR CF 10kg | 5 | 2018-03-01
我想从detail_order表中检索营业额数据及其产品条形码,但即使mainproduct表中的产品数据不在detail_order表中,我也希望将其与稍后的total_order 0一起显示(如果不是)在detail_order表中。小于如下:
id_mainproduct | barcode | product_name | total_order_pcs |
================+===============+======================+====================+===
1 | 8995157800257 | Pandan Wangi CF 5kg | 6 |
2 | 8995157800264 | Pandan Wangi CF 10kg | 13 |
3 | 8995157800271 | Pandan Wangi CF 20kg | 4 |
4 | 8995157800288 | Rojolele CF 5kg | 8 |
5 | 8995157800301 | Rojolele CF 20kg | 0 |
6 | 8995157800318 | SR CF 5kg | 10 |
7 | 8995157800325 | SR CF 10kg | 10 |
8 | 8995157800332 | SR CF 20kg | 0 |
其实我可以连接两个表,但是在mainproduct的数据部分,没有detail_order的数据,我无法显示它,请帮助我。
我的代码:
SELECT mainproduct.id,
mainproduct.barcode,
mainproduct.product_name,
SUM(R.pcs_order) as total_order
FROM
(
SELECT barcode, pcs_order, date_order
FROM detail_order
) AS R
LEFT JOIN mainproduct ON mainproduct.barcode = R.barcode
WHERE r.date_order BETWEEN '2018-02-01' AND '2018-02-28' GROUP BY mainproduct.id
ORDER BY mainproduct.id ASC
最佳答案
无论您如何评论,您的加入顺序仍然错误。
a LEFT JOIN b
表示保留a
中出现的每一条记录,即使b
中没有对应的行。
如果您想要每种产品的销量,即使该产品没有销售记录(显示零),您需要产品左加入销售
。
如果您只想计算特定时间窗口内的销售额,请在连接之前过滤销售额(sub,在子查询中)。
SELECT
mainproduct.id,
mainproduct.barcode,
mainproduct.product_name,
COALESCE(SUM(R.pcs_order), 0) AS total_order
FROM
mainproduct
LEFT JOIN
(
SELECT barcode, pcs_order, date_order
FROM detail_order
WHERE date_order BETWEEN '2018-02-01' AND '2018-02-28'
)
AS R
ON mainproduct.barcode = R.barcode
GROUP BY
mainproduct.id
ORDER BY
mainproduct.id ASC
关于mysql - 如何通过SQL Join显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50503711/