我正在尝试使用taudenmeirs的laravel-cte软件包将以下SQL查询转换为Laravel代码。
WITH `cte` AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY channel_id ORDER BY created_at DESC) AS row_number
FROM `Videos`
)
SELECT `Channels`.*, `cte`.*
FROM `Channels`
LEFT JOIN `cte`
ON `Channels`.`id` = `cte`.`channel_id`
WHERE `cte`.`row_number` = 1;
问题是我不断从服务器收到以下响应:
Illuminate \ Database \ QueryException:SQLSTATE [42000]:语法错误或 访问冲突:1140 GROUP列混合 没有GROUP列的(MIN(),MAX(),COUNT(),...)是非法的 是没有GROUP BY子句(SQL:cte as(select ,ROW_NUMBER()OVER (PARTITION BY channel_id ORDER BY created_at DESC)AS row_number from 视频)中选择频道。从左侧频道中加入 文件中的Channels.id = cte.channel_id,其中cte.rn = 1) /Users/mark/Workspace/api.site/vendor/laravel/framework/src/Illuminate/Database/Connection.php 在第665行
答案 0 :(得分:0)
我实际上是从taudenmeirs那里得到这个答案的,我在github上以bug的形式提交了这个问题。原来,该错误是由MariaDB中的错误引起的:https://jira.mariadb.org/browse/MDEV-17785
默认情况下,Laravel中启用了ONLY_FULL_GROUP_BY
模式。您可以通过在config / database.php文件中设置'strict' => false
来禁用它。
这确实可以解决问题。但是,最好由Maria的优秀人才解决潜在的错误。