作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的印象是,在 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/
我是一名优秀的程序员,十分优秀!