mysql分组和组_CONCAT返回NULL

mysql分组和组_CONCAT返回NULL,mysql,group-by,group-concat,Mysql,Group By,Group Concat,现在我不能真正理解两件事 这是我的初始查询: 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_requir

现在我不能真正理解两件事

这是我的初始查询:

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
此查询应列出订单和已分配给指定订单的物料

但在某些特殊情况下,它不起作用,我不知道为什么

物料编号和物料历史记录必须有相应的条目

上述查询的结果,例如:

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 srequired  sn_cnt  sn_list  
048976      348         1      XXX         1          1       123442450269
现在我得到以下结果:

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)
此时 序号cnt=1对应于项目XXX,但不对应于YYY,序号列表也不应为空

如果我省略了“按订单分组。artikel_id”,那么我会得到以下结果:

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 srequired  sn_cnt  sn_list  
048976      348         1      XXX         1          1       123442450269
这怎么可能

我正在使用mysql 5.7


谢谢

LEFT JOIN material\u sn和orders.artikel\u id=material\u sn.artikel\u id
你打算在orders.artikel\u id上写
而不是在这里写吗?
应该是的,我已经纠正了我的错误,你知道为什么会发生吗?思考
LEFT JOIN(t2,t3,t4)
LEFT JOIN吗(t2交叉连接t3交叉连接t4)
。但是涉及的表太多了,我想不起来。Ref:是的,我已经读过这篇文章,直到现在我才明白,我不能在交叉连接中使用附加条件,但为了消除交叉连接,我将两个表分开放在两个左连接中,所以交叉连接不会是一个问题,尽管很有趣,为什么步骤1会做出如此不同的结果即使交叉连接可以工作,步骤2也是必不可少的