MySQL通过给出不同的结果将不同参数作为group左连接

时间:2014-01-02 11:24:49

标签: mysql

这是第一个声明:

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


问题:为什么两个结果不同?

1 个答案:

答案 0 :(得分:1)

来自MySQL Extensions to GROUP BY

  

MySQL扩展了GROUP BY的使用,以便选择列表可以引用   未在GROUP BY子句中命名的非聚合列。

     

您可以通过避免使用此功能来获得更好的性能   不必要的列排序和分组。但是,这很有用   主要是当每个非聚合列中的所有值都未命名时   GROUP BY对于每个组都是相同的。 服务器是免费的   从每个组中选择任何值,所以除非它们相同,否则   选择的值是不确定的。

在您的情况下,您需要U.USER_ID并选择未汇总的列E.EMP_NAME,O.NAME