这是第一个声明:
SELECT * FROM (
SELECT E.EMP_NAME,O.NAME AS DEPTNAME
FROM M_EMPLOYEE E
LEFT JOIN M_USERS U ON U.USER_ID=E.USER_ID
LEFT JOIN M_ORGANIZATION O ON U.DEPT_ID=O.ORG_ID
GROUP BY E.USER_ID)T WHERE T.EMP_NAME='lm';
结果如下:
EMP_NAME |的 DEPTNAME
lm |的空
这是第二个陈述:
SELECT * FROM (
SELECT E.EMP_NAME,O.NAME AS DEPTNAME
FROM M_EMPLOYEE E
LEFT JOIN M_USERS U ON U.USER_ID=E.USER_ID
LEFT JOIN M_ORGANIZATION O ON U.DEPT_ID=O.ORG_ID
GROUP BY U.USER_ID )T WHERE T.EMP_NAME='lm';
结果如下:
EMP_NAME |的 DEPTNAME
lm |的 qitan
问题:为什么两个结果不同?
答案 0 :(得分:1)
来自MySQL Extensions to GROUP BY
MySQL扩展了GROUP BY的使用,以便选择列表可以引用 未在GROUP BY子句中命名的非聚合列。
您可以通过避免使用此功能来获得更好的性能 不必要的列排序和分组。但是,这很有用 主要是当每个非聚合列中的所有值都未命名时 GROUP BY对于每个组都是相同的。 服务器是免费的 从每个组中选择任何值,所以除非它们相同,否则 选择的值是不确定的。
在您的情况下,您需要U.USER_ID
并选择未汇总的列E.EMP_NAME,O.NAME