在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中有效的查询?
答案 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);
}
}
。
SQL_MODE=ONLY_FULL_GROUP_BY
但是在MySQL 5.7中,它更聪明。它知道table3.column2在功能上依赖于table3中选择的单行,因此column2保证具有单个值。没有生成错误。