gpt4 book ai didi

mysql - GROUP BY 列名与列别名

转载 作者:行者123 更新时间:2023-11-29 06:40:49 26 4
gpt4 key购买 nike

我的印象是,在 MySQL 中,GROUP BY 支持使用列名或列别名。

我有一些相当简单的 SQL,它在 2 个表之间进行交叉连接,然后进行左连接以获得一些匹配数据(如果存在),然后连接匹配数据。这给出了奇怪的结果。最后意识到问题似乎是我使用了别名而不是实际的列名。

对于别名,它似乎以不同的方式处理了左侧连接不匹配行的那些行。因此,尽管共享相同的 GROUP BY 字段,但组返回了 2 行。

这 2 个查询是,首先按列别名分组':-

SELECT a.id AS item_id, a.code AS item_code, GROUP_CONCAT( CONCAT_WS( ":", c.name, IFNULL( d.value, "void" ) ) 
ORDER BY c.name ) AS AllAnaly
FROM item a
CROSS JOIN item_analy c
LEFT OUTER JOIN item_analy_value d ON a.id = d.item_id
AND c.id = d.analy_id
GROUP BY item_id, item_code;

并按列名分组

SELECT a.id AS item_id, a.code AS item_code, GROUP_CONCAT( CONCAT_WS( ":", c.name, IFNULL( d.value, "void" ) ) 
ORDER BY c.name ) AS AllAnaly
FROM item a
CROSS JOIN item_analy c
LEFT OUTER JOIN item_analy_value d ON a.id = d.item_id
AND c.id = d.analy_id
GROUP BY a.id, a.code;

我编写了一个 SQL fiddle 来演示这一点:-

http://sqlfiddle.com/#!2/35a69

我遗漏了 MySQL 如何处理 GROUP BY 子句中的别名?

最佳答案

我想发生的事情是 MySQL 默认使用与指定的 GROUP BY 列相匹配的非别名列名,如果找不到,它会使用别名。在您的示例中,带有列名的查询是正确的,而当您使用别名时,它认为没有别名。

虽然此查询也将像您按列名分组一样工作。

  SELECT a.id AS item_id, a.code AS item_code, GROUP_CONCAT( CONCAT_WS( ":", c.name, IFNULL( d.value, "void" ) ) 
ORDER BY c.name ) AS AllAnaly
FROM item a
CROSS JOIN item_analy c
LEFT OUTER JOIN item_analy_value d ON a.id = d.item_id
AND c.id = d.analy_id

关于mysql - GROUP BY 列名与列别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683956/

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