MySQL中混合聚合和非聚合是否存在任何问题?

MySQL中混合聚合和非聚合是否存在任何问题?,mysql,Mysql,在MySQL中,我可以这样做: select sum(table1.column1), table3.column2 from table1 JOIN table2 on table1.t2_id = table2.id JOIN table3 on table2.t3_id = table3.id where table3.id = 7; 这在MySQL中是完全有效的代码,但混合使用聚合和非聚合(像这样)是不合适的SQL 在这种情况下,每个table3.id只有一个table3.column

在MySQL中,我可以这样做:

select sum(table1.column1), table3.column2
from table1
JOIN table2 on table1.t2_id = table2.id
JOIN table3 on table2.t3_id = table3.id
where table3.id = 7;
这在MySQL中是完全有效的代码,但混合使用聚合和非聚合(像这样)是不合适的SQL

在这种情况下,每个table3.id只有一个table3.column2值,因此不会遇到不一致的值。那么,以这种方式执行查询会有任何问题吗


有没有更好的方法来编写符合SQL标准且在MySQL中有效的查询?

标准SQL会抱怨您的查询,因为您的非聚合列不在GROUP BY子句中

MySQL 5.6还抱怨,如果您使用
SQL\u模式=仅\u满\u组\u BY

mysql> select sum(table1.column1), table3.column2 from table1 JOIN table2 on table1.t2_id = table2.id JOIN table3 on table2.t3_id = table3.id where table3.id = 7;

ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

但在MySQL 5.7中,它更聪明。它知道table3.column2在功能上依赖于在table3中选择的单行,因此column2保证只有一个值。没有生成错误。

标准SQL会抱怨您的查询,因为您的非聚合列不在GROUP BY子句中

MySQL 5.6还抱怨,如果您使用
SQL\u模式=仅\u满\u组\u BY

mysql> select sum(table1.column1), table3.column2 from table1 JOIN table2 on table1.t2_id = table2.id JOIN table3 on table2.t3_id = table3.id where table3.id = 7;

ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
但在MySQL 5.7中,它更聪明。它知道table3.column2在功能上依赖于在table3中选择的单行,因此column2保证只有一个值。没有生成错误