$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();
当我使用以上选择('a.id')是工作得很好。
但是当我使用select('a.*)来选择一个cloumn时,我得到了一个错误
SQLSTATE[42000]: Syntax error or access violation: 1055 'employee.A.name' isn't in GROUP BY
ps:employee是我的数据库名表上的列是
id name ....
1 john
2 mary
3 susan
如何通过leftjoin选择所有列?列a.id是与b.p\u id列的一对多关系。
4条答案
按热度按时间yhxst69z1#
我详细地看了你的问题。我也面临同样的问题。在database.php中,有以下设置
当我将strict属性设置为false时,它起作用了,我解决了这个问题。
sr4lhrrt2#
使用select('a.*)选择所有列
zhte4eai3#
要解决此问题,需要在select list和group by子句中指定所需的列
根据更新的版本mysql 5.7,不允许select list、having condition或order by list引用groupby子句中未命名的非聚集列的查询
12.19.3 mysql分组处理
根据文件
mysql 5.7.5及更高版本实现了函数依赖性的检测。如果启用了only\ full\ group\ by sql模式(默认情况下是这样),mysql将拒绝select list、having condition或order by list引用的未聚合列,这些列既不在groupby子句中命名,也不在功能上依赖于它们(在5.7.5之前,mysql没有检测到函数依赖性,默认情况下只启用\u full \u group \u by
ztyzrc3y4#
您必须在laravel应用程序中关闭sctrict模式。
去
config/database.php
在mysql集合下它就会开始工作。
希望这有帮助。