mysql GROUPING和GROUP_CONCAT返回NULL

时间:2017-03-08 13:08:48

标签: mysql group-by group-concat

现在我无法理解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

谢谢!

0 个答案:

没有答案