gpt4 book ai didi

带有 'group by' 的 MySQL 'left join' 丢弃了一些条目

转载 作者:行者123 更新时间:2023-11-29 02:24:07 24 4
gpt4 key购买 nike

我有一个看起来像这样的查询:

SELECT 
orders.order_id,
items.item_id,
GROUP_CONCAT(graphics.graphic_id) AS graphic_ids
FROM orders orders
LEFT JOIN order_items items ON orders.order_id = items.order_id
LEFT JOIN order_graphics graphics on graphics.item_id = items.item_id
WHERE // etc
GROUP BY items.item_id

订单可以有零个或多个项目,项目可以有零个或多个图形。目标是获取所有符合 WHERE 条件的订单,按订单项逐项列出,并列出每个订单项上的图形,如下所示:

// ideal
+----------+---------+---------------+
| order_id | item_id | graphic_ids |
+----------+---------+---------------+
| 3097 | NULL | NULL |
| 3098 | NULL | NULL |
| 3099 | NULL | NULL |
| 3100 | 112437 | NULL |
| 3101 | 112677 | 127003 |
| 3102 | 112948 | 127314 |
| 3102 | 112949 | 127315 |
| 3102 | 112950 | 127316 |
| 3103 | 122807 | 138005,138006 |
+----------+---------+---------------+

但是,GROUP BY/GROUP_CONCAT 子句意味着所有具有零项的订单都分组在 NULL 下:

// reality
+----------+---------+---------------+
| 3097 | NULL | NULL |
| 3100 | 112437 | NULL |
| 3101 | 112677 | 127003 |
| 3102 | 112948 | 127314 |
| 3102 | 112949 | 127315 |
| 3102 | 112950 | 127316 |
| 3103 | 122807 | 138005,138006 |
+----------+---------+---------------+

有没有一种好方法可以group by `item_id 同时仍然列出所有没有项目的订单?

最佳答案

您应该在 group by 子句中包含不是聚合计算的每一列:

SELECT 
orders.order_id,
items.item_id,
GROUP_CONCAT(graphics.graphic_id) AS graphic_ids
FROM orders orders
LEFT JOIN order_items items ON orders.order_id = items.order_id
LEFT JOIN order_graphics graphics on graphics.item_id = items.item_id
WHERE // etc
GROUP BY orders.order_id, items.item_id

关于带有 'group by' 的 MySQL 'left join' 丢弃了一些条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26365844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com