0

我正在尝试使用 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: with cte as (select , ROW_NUMBER() OVER (PARTITION BY channel_id ORDER BY created_at DESC) AS row_number from Videos) select Channels. from Channels left join cte on Channels.id = cte.channel_id where cte.rn = 1) 在第 665 行的文件 /Users/mark/Workspace/api.site/vendor/laravel/framework/src/Illuminate/Database/Connection.php

4

1 回答 1

0

实际上,我在 github 上从 taudenmeirs 那里得到了这个答案,我将这个问题作为错误提交。事实证明,该错误是由 MariaDB 中的一个错误引起的:https ://jira.mariadb.org/browse/MDEV-17785

ONLY_FULL_GROUP_BYLaravel 默认启用该模式。'strict' => false您可以通过在 config/database.php 文件中进行设置来禁用它。

这实际上确实解决了问题。但是,如果 Maria 的优秀人员能够解决潜在的错误,那就更好了。

于 2020-01-16T05:28:46.897 回答