postgresql - 类似数据库中的不同 postgrese 行为
问题描述
我将 PHP 7.1 与 Pgsql 9.2.24 一起使用。拥有两个相似的项目副本(生产和开发)和两个具有相同数据的相似数据库。但是查询在 GROUP BY 情况下的工作方式不同。
我尝试使用 SHOW ALL 查询检查所有 sql 设置,但没有发现任何区别。我知道,重写查询可以解决我的问题,但是使用 GROUP BY 运算符的代码太多。完整的 SQL 版本:x86_64-redhat-linux-gnu 上的 PostgreSQL 9.2.24,由 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28) 编译,64 位。尝试运行 sql-query:
SELECT chr.*, usr.image, usr.first_name, usr.second_name, usr.last_activity, CASE WHEN MAX(chrm.created_at) IS NOT NUll THEN MAX(chrm.created_at) ELSE 0 END AS created_m, MAX(chrm.id) AS id_m FROM chat_rooms as chr LEFT JOIN users usr ON chr.author_id = usr.id LEFT JOIN chat_messages chrm ON chr.id = chrm.chat_id LEFT JOIN chat_rooms_user chru ON chr.id = chru.chat_rooms_id WHERE chru.user_id = 1104 AND chru.status = 1 AND ( chrm.status != 10 OR chrm.status IS NULL) AND chr.status = 1 GROUP BY chr.id, usr.id HAVING coalesce(COUNT(chrm.id),0) > 0 ORDER BY created_m DESC LIMIT 10 OFFSET 0
并得到错误(服务器状态 500):未捕获的异常:错误:列“chr.parent_id”必须出现在 GROUP BY 子句中或用于聚合函数中
其他数据库返回给我的不是错误,而是正确的数据结果。
解决方案
推荐阅读
- apache-kafka - 如何使用 Kafka Streams 处理无序的事件
- php - PHP下拉搜索结果选择错误的输入
- c# - WPF 中的 Toast 通知:ToastNotificationManager.History 抛出异常 win10
- unity3d - 如何在 Unity3d 中以谷歌形式在另一部分添加价值
- python - 从命令行参数打印出瓷砖
- docker - Nextflow+Singularity:没有这样的文件或目录,即使文件存在
- sql - 基于两列获取记录。如果两列具有相同的值,则为一条记录,否则为 2 条记录
- sql - 我无法在 SQL Server 2017 中将名字与中间名列分开
- docker - systemd 需要大量时间来杀死容器化服务
- r - 错误:在 data.table 中创建多个变量时,较长的对象长度不是较短对象长度的倍数