我的印象是,在MySQL中,GROUP BY支持使用列名或列别名'。GROUP BY列名与列别名
我有一些相当简单的SQL,它正在做两个表之间的交叉连接,然后左连接来获得一些匹配的数据(如果存在的话),并连接匹配的数据。这给了奇怪的结果。最后意识到问题似乎是我使用别名而不是实际的列名。
使用别名时,它似乎已经处理了这些行,并且左侧的不匹配行的连接方式不同。因此,尽管共享相同的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小提琴,演示了这一点: -
http://sqlfiddle.com/#!2/35a69
我很想念MyS如何QL在GROUP BY子句中处理别名?
Group by不工作任何列的别名! 细节答:http://stackoverflow.com/questions/3841295/sql-using-alias-in-group-by – Jain
@Jain - MySQL是一种风味,这应该工作 - https://dev.mysql.com/ doc/refman/5.0/en/problems-with-alias.html – Kickstart