【发布时间】:2017-10-07 12:03:59
【问题描述】:
你好,我坚持使用 mysql 子查询,这是我的表
table detail_order
==============================
id_detail | id_order | id_toko
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 1 | 4
table ket_detail
==================================
id_ket | id_detail | id_size | qty
1 | 1 | 7 | 3
2 | 1 | 9 | 1
3 | 1 | 5 | 2
4 | 2 | 7 | 8
table size
=================================
id_size | size | id_color | stock
7 | 40 | 6 | 30
9 | 42 | 6 | 20
5 | 39 | 5 | 30
table color
==========================
id_color | color
6 | green
5 | red
我尝试在子查询中使用 where 子句在表 ket_detail 上显示 qty,但是当我尝试它时,子查询返回不止一行。 这是我的查询
SELECT dt.id_detail,
SUM(tk.qty) AS tot_order,
COUNT(dm.color) AS tot_color,
(SELECT ket.qty FROM ket_detail AS ket, t_size AS u
WHERE u.id_size=ket.id_size AND u.size = 40) AS size_40
FROM detail_order AS dt
LEFT JOIN ket_detail AS tk ON tk.id_detail=dt.id_detail
LEFT JOIN t_size AS u ON u.id_size = tk.id_size
LEFT JOIN t_color AS dm ON dm.id_color=u.id_color
WHERE dt.id_order = 1
GROUP BY dt.id_detail
但是当我将大小更改为 39 时,这样的数据
id_detail | tot_order | tot_color | size_40
============================================
1 | 6 | 2 | 2
2 | 8 | 1 | 2
3 | NULL | 0 | 2
4 | NULL | 0 | 2
我想要的是这样的数据
id_detail | tot_order | tot_color | size_40
============================================
1 | 6 | 2 | 3
2 | 8 | 1 | 8
3 | NULL | 0 | NULL
4 | NULL | 0 | NULL
【问题讨论】:
-
您需要在子查询中使用
JOIN来生成id_size匹配的结果,粗略地查看您的问题。 -
尺寸需要id吗?为什么?
-
在提供的示例数据中,表
ket_detail中没有jumlah_order字段。查询使用了这个字段。 -
根据您的数据显示的结果是“正确的”,因为来自
size的size = 39的qty为“2”。我认为你需要更清楚地解释你想要做什么,因为它有点混乱。此外,jumlah_order不在您提供的表格数据中。 -
您仍然不需要代理键。您的主键可以分别是 (id_detail)、(id_detail,id_size)、(size,id_color) 和 (id_color) - 尽管我也质疑是否需要 color_id。