mysql - A.* 不在 GROUP BY 中,在 laravel 查询生成器上使用左连接
问题描述
$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();
当我使用上面的 select('A.id') 时效果很好。
但是当我使用 select('A.*') 来选择所有 A cloumn 我得到了错误
SQLSTATE[42000]: Syntax error or access violation: 1055 'employee.A.name' isn't in GROUP BY
PS:employee 是我的数据库名称 A 表上的列是
id name ....
1 john
2 mary
3 susan
如何通过leftjoin选择所有列?A.id 列与 B.p_id 列是一对多的关系。
解决方案
要解决此问题,您需要在选择列表和 group by 子句中指定所需的列
$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();
根据较新的版本,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
推荐阅读
- reactjs - :/slug 在我的反应应用程序中不起作用
- python - 在 Python 中,使用 freetype,我如何获得给定字体大小的下降线?
- python-3.x - 如何从python写入csv
- javascript - 如何在此自定义方法调用中检测到它是同一个文件
- javascript - 默认参数顺序错误结果
- java - 我的 Windows 名称中有一个空格(C:\Users\Jim Johnson 之类的)并且无法执行 keytool 来获取 SHA1 密钥
- python - 如何在 Python 中发送包含数据的获取请求?
- json - 在python django中从Json字符串获取结果到dict
- python - Jupyter notebook 自动排程
- python - 如何使用正在进行的 Python 字典中的数据完成 CSV 文件