mysql - 如何通过SQL Join显示数据

标签 mysql sql join

大家好,我想为我的案子寻求帮助。

第一个表数据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/

相关文章:

mysql - 什么是 utf8mb4 而不是 MySQL 的 utf8?

Java:如何将日期从数据库转换并显示到文本字段

mysql - 使用 postmeta 和 usermeta 的最佳方法? (Wordpress、Mysql 数据库)

SQL Server 存储过程和权限

Mysql内连接或左连接

MySQL 对两个子集进行排序

mysql - 比较两列中的最高收入访客

php - 尝试找ID还是使用JOIN哪个更有效

linux - 在 Linux 上连接两个文件

mysql - SQL - 是否可以按行值制作自定义列?