rob*_*pin 2 mysql group-by left-join laravel laravel-query-builder
$search_alls=
DB::table('a16s as A')
->select('A.id')
// ->select('A.*')
->addSelect(DB::raw('SUM(CASE WHEN B.approve = 1 ELSE 0 END) as Yshow'))
->leftjoin('a16s_likes as B', function($join) {
$join->on('A.id', '=', 'B.p_id');
})
->groupBy('A.id')
->get();
Run Code Online (Sandbox Code Playgroud)
当我使用上面的 select('A.id') 时效果很好。
但是当我使用 select('A.*') 选择所有 A 列时,出现错误
SQLSTATE[42000]: Syntax error or access violation: 1055 'employee.A.name' isn't in GROUP BY
Run Code Online (Sandbox Code Playgroud)
PS:employee是我的数据库名称A表上的列是
id name ....
1 john
2 mary
3 susan
Run Code Online (Sandbox Code Playgroud)
如何通过 leftjoin 选择所有列?A.id 列与 B.p_id 列是一对多关系。
要解决此问题,您需要在选择列表和分组依据子句中指定所需的列
$search_alls=DB::table('a16s as A')
->select('A.id','A.name')
->addSelect(DB::raw('SUM(CASE WHEN B.approve = 1 ELSE 0 END) as Yshow'))
->leftjoin('a16s_likes as B', function($join) {
$join->on('A.id', '=', 'B.p_id');
})
->groupBy('A.id')
->groupBy('A.name');
->get();
Run Code Online (Sandbox Code Playgroud)
根据较新版本,mysql 5.7 不允许查询的选择列表、HAVING 条件或 ORDER BY 列表引用未在 GROUP BY 子句中命名的非聚合列
根据文档
MySQL 5.7.5及以上版本实现了函数依赖检测。如果启用ONLY_FULL_GROUP_BY SQL 模式(默认情况下),MySQL 将拒绝选择列表、HAVING 条件或 ORDER BY 列表引用既未在 GROUP BY 子句中命名也不在功能上依赖于它们的非聚合列的查询。(5.7.5之前,MySQL不检测函数依赖,默认不启用ONLY_FULL_GROUP_BY
| 归档时间: |
|
| 查看次数: |
13454 次 |
| 最近记录: |