当前位置: 首页 > 面试题库 >

MySQL 5.6是否具有ANY_VALUE功能?

锺离自明
2023-03-14
问题内容

目前,我正在开发中使用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函数的任何解决方案或策略填充吗?


问题答案:

您正在滥用对GROUP BY的臭名昭著的非标准MySQL扩展。标准SQL始终会拒绝您的查询,因为您所提到的列不是聚合列,而在中未提及GROUP BY。在您的开发系统中,您正在尝试使用解决该问题ANY_VALUE()

在生产中,您可以关闭ONLY_FULL_GROUP_BY
MySQL模式。

尝试做这个:

  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

每个国家/地区将返回一行,并显示可预测的图像。



 类似资料:
  • 问题内容: SASS具有一个称为的功能,该功能允许选择器继承另一个选择器的属性,但不复制属性(如mixins)。 LESS是否也具有此功能? 问题答案: 是的,Less.js推出的V1.4.0。 LESS没有实现SASS和Stylus使用的at- rule()语法,而是实现了伪类语法,这为LESS的实现提供了灵活性,使其可以直接应用于选择器本身或在语句内部。因此,这两个都将起作用: 要么 此外,您

  • 问题内容: 不幸的是,HTML中没有CDATA。 遗憾的是,因为它非常适合添加包含XML的注释,因此您不必转义<和>,例如: 但是,可以识别CDATA部分,然后将其转换为HTML。例如: 或者它可以使用比CDATA更简单的语法。因为是可扩展的,所以可能有人添加了此功能。也许已经将它埋在里面的某处…有人知道吗? 问题答案: 您可以使用JavaDoc的标签:

  • 我正在考虑将我们的“mono repo”分离开来,以便每个可部署服务都有自己的repo。这样做的一个缺点是,对任何通用模块/库进行更改变得很繁琐,因为这需要先发布库,然后在gradle中更新版本以使用更改。 npm似乎通过npm链接绕过了这个问题,npm链接允许您在推动更改之前修改库并在应用程序中测试它。我想知道gradle或任何其他构建工具是否为java应用程序提供了类似的功能。

  • 问题内容: 我认为在Ruby中,您可以调用一个尚未定义的方法,然后捕获被调用方法的名称,并在运行时对该方法进行处理。 Javascript可以做同样的事情吗? 问题答案: 由于Python中不存在method_missing,因此method_missing不太适合JavaScript:在两种语言中,方法只是碰巧是函数的属性;对象通常具有不可调用的公共属性。与Ruby相比,Ruby的对象的公共接口

  • 问题内容: 我尝试在网络上进行挖掘以使问题得到解答。我找到了一些与达芬奇计划有关的文件。这被标记为与在JVM中包含闭包有关的JSR 292。这个项目实现了吗,它是Java 8的一部分吗? 问题答案: 据我所知,Java 8没有尾调用优化。Afaik与实际的编译器技巧无关,因为它很简单,但是为了安全起见保留了一个调用栈。但是我想使用字节码重写器是可能的。

  • 问题内容: 我想从数据库中获取一个对象(如果已存在)(基于提供的参数),或者如果不存在则创建它。 Django的(或)做到了。SQLAlchemy中是否有等效的快捷方式? 我目前正在像这样明确地写出来: 问题答案: 基本上就是这样做的方法,没有快捷方式可供使用的AFAIK。 你可以将其概括为: