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

时间:2018-03-09 23:10:23

标签: 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.column2值,因此遇到不一致的值没有问题。那么,以这种方式执行查询会有任何问题吗?

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

1 个答案:

答案 0 :(得分:2)

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

如果您使用import { Injectable } from '@angular/core'; import { HttpEvent, HttpRequest, HttpInterceptor, HttpHandler } from '@angular/common/http'; import { Observable } from 'rxjs'; @Injectable() export class MyInterceptor implements HttpInterceptor { intercept( req: HttpRequest<any>, next: HttpHandler ): Observable<HttpEvent<any>> { // ... return next.handle(req); } }

,MySQL 5.6也会抱怨
SQL_MODE=ONLY_FULL_GROUP_BY

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