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也是必不可少的