现在我无法理解2件事。
这是我的初步查询:
SELECT orders.order_id,
orders.artikel_id,
orders.count,
material_list.artikelname,
material_list.sn_required,
COUNT(DISTINCT material_history.sn_id) AS sn_cnt,
GROUP_CONCAT(IF(material_list.sn_required,material_sn.sn,NULL)) AS sn_list
FROM orders
INNER JOIN material_list
ON orders.artikel_id=material_list.artikel_id
AND materialbestellung.bestell_id='048976'
LEFT JOIN (material_sn, material_history)
ON orders.artikel_id=material_sn.artikel_id
AND material_history.sn_id=material_sn.id
AND orders.order_id=material_history.assignment_id
AND material_history.assignment='order_id'
AND material_sn.aktuelle_id_historie=material_history.mat_historie_id
GROUP BY orders.artikel_id
ORDER BY artikelname ASC
此查询应列出订单并已将指定材料分配给指定订单。
但在某些特殊情况下,它不起作用,我不知道为什么
material_sn和material_history HAVA TO HAVE相应的条目
上面的查询结果,例如:
order_id artikel_id count artikelname sn_required sn_cnt sn_list
048976 348 1 XXX 1 0 (NULL)
048976 7 0 YYY 1 0 (NULL)
现在我将查询更改为以下内容:
SELECT orders.order_id,
orders.artikel_id,
orders.count,
material_list.artikelname,
material_list.sn_required,
COUNT(DISTINCT material_history.sn_id) AS sn_cnt,
GROUP_CONCAT(IF(material_list.sn_required,material_sn.sn,NULL)) AS sn_list
FROM orders
INNER JOIN material_list
ON orders.artikel_id=material_list.artikel_id
AND materialbestellung.bestell_id='048976'
LEFT JOIN material_history
ON orders.order_id=material_history.assignment_id
AND material_history.assignment='order_id'
LEFT JOIN material_sn
ON orders.artikel_id=material_sn.artikel_id
AND material_sn.aktuelle_id_historie=material_history.mat_historie_id
AND material_history.sn_id=material_sn.id
GROUP BY orders.artikel_id
ORDER BY artikelname ASC
现在我得到以下结果:
order_id artikel_id count artikelname sn_required sn_cnt sn_list
048976 348 1 XXX 1 1 (NULL)
048976 7 0 YYY 1 1 (NULL)
此时此刻 sn_cnt = 1适用于文章XXX但不适用于YYY,sn_list也不应为NULL
如果我遗漏“GROUP BY orders.artikel_id”,那么我得到以下内容:
order_id artikel_id count artikelname srequired sn_cnt sn_list
048976 348 1 XXX 1 1 123442450269
怎么可能?
我正在使用mysql 5.7
谢谢!