在 HeidiSQL 中执行查询时与 only_full_group_by 相关的错误

Posted

技术标签:

【中文标题】在 HeidiSQL 中执行查询时与 only_full_group_by 相关的错误【英文标题】:Error related to only_full_group_by when executing a query in HeidiSQL 【发布时间】:2018-01-25 10:50:22 【问题描述】:

我想在我的数据库中创建一个视图,下面是我的代码和错误消息

SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列“ucarer_server.ord_order.request_patient_id”,它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容

而且,我也检查了 *** 上的答案 这是链接

Error related to only_full_group_by when executing a query in mysql

但是,仍然无法为我工作... 谁能告诉我哪里可以修?

select
   ord_order.`request_patient_id`,
   ord_order.`order_id`,
   ord_order.`bundle_id`,
   gvr_caregiver.`surname` as gvr_surname,
   ord_order.`gvr_response_datetime` as 'gvr_response_datetime',
   usr_user.user_id,
   ord_order.`order_status_code_abbr`,
   gvr_caregiver.`first_name` as gvr_first_name,
   IFNULL(ord_order.`bundle_number`, ord_order.`order_number`) as bundleOrOrderNumber,
   ord_order.order_status_last_update_datetime
from ord_order
left join gvr_caregiver on ord_order.srv_caregiver_id = gvr_caregiver.caregiver_id
left join usr_user on usr_user.patient_id = ord_order.request_patient_id
group by bundleOrOrderNumber;

【问题讨论】:

【参考方案1】:

这是因为ord_order.request_patient_id 不是 group by 或 where 条件的一部分。当您在bundleOrOrderNumber 上进行分组时,患者 ID 可以采用许多值。您需要对所有选定的表达式执行 group by 或 where 条件。

请注意,这只发生在特定的 sql 模式 ONLY_FULL_GROUP_BY 时。您可以通过select @@sql_mode 查看所有 sql 模式都存在。如果您删除此 sql 模式,您的查询将正常工作,但我不建议这样做,因为查询有可能出错。

【讨论】:

这就是我的答案的解释,谢谢! 非常感谢 yaswanth,aaron0207 !【参考方案2】:

我猜这与严格模式有关,所以disable group by check 通过修改连接配置。编辑您的 config/database.php 并将以下内容添加到选定的连接数组中:

'strict'    => true,
            'modes'     => [
                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_AUTO_CREATE_USER',
                'NO_ENGINE_SUBSTITUTION'
            ],

它将保持严格模式打开,但禁用分组检查

【讨论】:

以上是关于在 HeidiSQL 中执行查询时与 only_full_group_by 相关的错误的主要内容,如果未能解决你的问题,请参考以下文章

heidisql 8.3怎么安装

sqlyog和heidisql哪个好用

如何在 Laravel 6 中转换原始 sql 查询?

heidiSQL使用简介

如何在托管数据库中使用 HeidiSQL(或类似的 MySQL 管理器)

为啥heidisql 我的表明不能在库名下面显示