- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
目前我在开发中使用 mysql 5.7,在生产中使用 5.6。每次我在开发中使用 group by 运行查询时,我都会收到一些错误,例如“错误代码:1055。SELECT 列表的表达式 #1 不在 GROUP BY 中”
这是查询。
SELECT c.id, c.name, i.*
FROM countries c, images i
WHERE i.country_id = c.id
GROUP BY c.id; Fixed for 5.7;
SELECT c.id, c.name,
ANY_VALUE(i.url) url,
ANY_VALUE(i.lat) lat,
ANY_VALUE(i.lng) lng
FROM countries c, images i
WHERE i.country_id = c.id
GROUP BY c.id;
为了解决这个问题,我使用了 5.7 ANY_VALUE 的 mysql 函数,但主要问题是它在 mysql 5.6 中不可用
因此,如果我为开发修复 sql 语句,我将在生产中遇到错误。
您知道 mysql 5.6 中 ANY_VALUE 函数的任何解决方案或 polifill 吗?
最佳答案
您误用了 notorious nonstandard MySQL extension to GROUP BY .标准 SQL 将始终拒绝您的查询,因为您提到的列不是聚合的,也没有在 GROUP BY
中提及。在您的开发系统中,您正尝试使用 ANY_VALUE()
解决这个问题。
在生产中,您可以关闭 ONLY_FULL_GROUP_BY MySQL Mode.尝试做this :
SET @mode := @@SESSION.sql_mode;
SET SESSION sql_mode = '';
/* your query here */
SET SESSION sql_mode = @mode;
这将允许 MySQL 接受您的查询。
但是看,您的查询并不正确。当您可以说服它运行时,它会从 images
表中返回一个随机选择的行。这种不确定性通常会给用户和您的技术支持人员造成混淆。
为什么不让查询更好,所以它选择了一个特定的图像。如果您的 images
表有一个自动增量 id
列,您可以这样做以选择“第一张”图像。
SELECT c.id, c.name, i.*
FROM countries c
LEFT JOIN (
SELECT MIN(id) id, country_id
FROM images
GROUP BY country_id
) first ON c.id = first.country_id
LEFT JOIN images i ON first.id = i.id
这将在每个国家/地区返回一行,并显示可预测的图像。
关于mysql - mysql 5.6 是否有 ANY_VALUE 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37089347/
我想从mysql中选择最新的数据,所以我运行下面的sql,但是我得到next_visit_time与max create_time行的实际值不匹配>。所以我检查了数据,发现最新的数据是 null ,所
我正在尝试创建一个动态的 where 子句。我在 PHP 中得到一些复选框数组,如下代码 $brand = array(); if(isset($_GET['brand']) && !empty($_
考虑以下查询: with abc as ( select 1 as a, 1 as b, 2 as c union all select 1, 3, 4 union all selec
我想在 MySQL 5.7 中使用 GROUP BY 时为每个组获取一个随机行。根据我的研究,最干净的方法是这样做: SELECT ANY_VALUE(column_1), ANY_VALUE(col
我有一个连接到 mysql 数据库的 laravel 项目,当我更改服务器时,我的代码失败了,因为我的新服务器有一个 Mariadb,当我检查我的日志时,我意识到,MariaDb 中有一些不受支持的函
面临的问题 incompatible with sql_mode=only_full_group_by; 要解决此问题,请立即使用 ANY_VALUE() ,它解决了问题。 但是,在一些mysql查询
默认启用 SQL 模式 ONLY_FULL_GROUP_BY。因此,我没有禁用 ONLY_FULL_GROUP_BY,而是尝试使用 ANY_VALUE(arg) 查询获取了我预期的结果。 我希望它与
自从mysql 5.7.5 group by发生了变化 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html 如果我做这个查询
我想在 MySQL 中创建一个具有可选值的查询。当指定值时,查询将按该值过滤,当值不是时返回所有行。想法是这样的: public function doQuery($item = 'ANY_VALUE
我有一个看起来像这样的“供应商”表... **company itemKey itemPriceA itemPriceB** companyA, 203913, 20, 10 companyA, 20
我有重现错误的表格和数据: DROP DATABASE IF EXISTS `theway`; CREATE DATABASE IF NOT EXISTS `theway` DEFAULT C
目前我在开发中使用 mysql 5.7,在生产中使用 5.6。每次我在开发中使用 group by 运行查询时,我都会收到一些错误,例如“错误代码:1055。SELECT 列表的表达式 #1 不在 G
在这样的 SQL 查询中: SELECT * FROM MyTable WHERE x = 5; 是否可以修改 WHERE 条件以便 SELECT 查找 x 的每个值?类似(错误的语法): SELEC
我是一名优秀的程序员,十分优秀!