教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)Mysql 无法选取非聚合列。

更多讨论或者错误提交,也请移步。

1. 前言

最近升级博客,给文章页面底部增加了两个按钮,可以直接跳转到上一篇和下一篇。如下图所示:

实现这个功能的难点在于:数据库怎么选取出一条记录的前后两条相邻的记录?

2. 数据库设计

关于我文章数据库的设计如下图所示:

可以看到,每条记录的身份是索引Id。因为之前有很多文章记录被删除了,所以,Id并不是连续的。

如果当前文章的索引值是33,那么可以通过以下命令来得到前后相邻的 2 篇文章:

select * from passage where id in
(select
case
when SIGN(id - 32 )>0 THEN MIN(id)
when SIGN(id - 32 )<0 THEN MAX(id)
end
from passage
where id != 34
GROUP BY SIGN(id- 32 )
ORDER BY SIGN(id- 32 )
)
ORDER BY id;

3. 无法选取聚合列

在执行上面命令时,Mysql给了我个: SELECT list is not in GROUP BY clause ... 的报错。经过 Google 得知,mysql 5.7以上,默认启动了only_full_group_by,MySQL 就会拒绝选择列表、条件或顺序列表引用的查询。

以下是原文:

Reject queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are neither named in the GROUP BY clause nor are functionally dependent on (uniquely determined by) GROUP BY columns.
As of MySQL 5.7.5, the default SQL mode includes ONLY_FULL_GROUP_BY. (Before 5.7.5, MySQL does not detect functional dependency and ONLY_FULL_GROUP_BY is not enabled by default. For a description of pre-5.7.5 behavior, see the MySQL 5.6 Reference Manual.)

所以,我们应该设置sql_mode不包含only_full_group_by选项

进入 mysql 配置文件,在[mysqld]部分中添加以下配置,并且重启 mysql 即可。

[mysqld]
# ... other config
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # delete 'only_full_group_by'
# ... other config

运行本文第二部分的 mysql 的命令,结果如下图所示:

4. 相关链接

  • only_full_group_by

转载于:https://www.cnblogs.com/geyouneihan/p/9562658.html

Mysql无法选取非聚合列相关推荐

  1. MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题

    MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题 参考文章: (1)MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题 (2)https://ww ...

  2. mysql聚簇索引和非聚簇索引

    引语 这篇文章主要介绍mysql中innodb的聚簇索引和非聚簇索引,那首先我们要先看下聚簇索引和非聚簇索引的概念是什么,是干什么用的. 聚簇索引和非聚簇索引的概念 我们先引用官网上的一段话来看看它们 ...

  3. mysql 随机选择数据_从MySQL随机选取数据

    从MySQL随机选取数据最简单的办法就是使用"ORDER BY RAND()"; 方案一: SELECT * FROM `table` ORDER BY RAND() LIMIT  ...

  4. 从MySQL随机选取数据

    --从MySQL随机选取数据 -------------------------2014/06/23 从MySQL随机选取数据最简单的办法就是使用"ORDER BY RAND()" ...

  5. mysql 聚簇索引和非聚簇索引_MySQL 聚簇索引 二级索引 辅助索引(上两期中奖名单)...

    阅读文本大概需要3分钟. MySQL中每个表都有一个聚簇索引( clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引( secondary indexes ). ...

  6. MySQL表的非外键约束

    MySQL表的非外键约束 /* 建立一张用来存储学生信息的表  字段包含学号.姓名.性别,年龄.入学日期.班级,email等信息  学号是主键 = 不能为空 +? 唯一  姓名不能为空  性别默认值是 ...

  7. 虚拟专题:联邦学习 | 面向隐私保护的非聚合式数据共享综述

    来源:通信学报 面向隐私保护的非聚合式数据共享综述 李尤慧子1, 殷昱煜1, 高洪皓2,3, 金一4, 王新珩5 1 杭州电子科技大学计算机学院,浙江 杭州 310018 2 上海大学计算机工程与科学 ...

  8. Mysql执行计划的extra列及filesort祥析

    Extra列显示Mysql解析查询的附加信息.有如下取值: 1. Impossible Where WHERE条件恒不满足,结果集为空 2. Impossible Having HAVING条件恒不满 ...

  9. sqlserver聚合索引(clustered index) / 非聚合索引(nonclustered index)的理解

    1. 什么是聚合索引(clustered index) / 什么是非聚合索引(nonclustered index)? 可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索 ...

最新文章

  1. 2021年大数据Spark(五十二):Structured Streaming 事件时间窗口分析
  2. 影像组学视频学习笔记(42)-影像组学特征提取问题解决过程复现、Li‘s have a solution and plan.
  3. SpringCloud中文社区转型Spring4All欢迎您的加入
  4. 我竟然混进了 Python 高级圈子!
  5. 单片机拼字程序怎么做_小程序商城怎么做?做一个小程序需要多少钱
  6. 网络数据校验随笔(1)
  7. Oracle Number用法
  8. 和大家分享一款使用PHP+MYSQL搭建在线教育系统源码
  9. ISTP会议论文检索
  10. FingerGestures手势插件的使用
  11. 作业1:小型考勤登记表
  12. 《机器学习算法竞赛实践》学习笔记(1)神经网络
  13. 1.《阿西莫夫:机器人短篇全集》
  14. linux驱动系列学习之DRM(十)
  15. 室内定位算法_【好设计论文】基于行人航迹推算的室内定位算法研究
  16. 未来电信业的发展方向 VOIP的中国之路
  17. 三款EPUB阅读软件对比
  18. 理解CSS clear:both/left/right的含义以及应用
  19. 阿里、有道科大讯飞齐为荣耀Magic2打call,透露YOYO想不到的技能
  20. oracle dbms_repair,DBMS_REPAIR的使用

热门文章

  1. 设计模式系列·抽象工厂模式
  2. 元数据驱动的微服务架构(上)
  3. 高性能ORM框架XLinq功能详细介绍
  4. 超大磁盘分区工具parted使用介绍(一)
  5. Wireless-N Configuration
  6. SOA标准发展混乱 国内业务缺少经验
  7. Swift - 使用addSubview()方法将StoryBoard中的视图加载进来
  8. mongodb使用常用语法,持续更新
  9. 认识flask框架-2
  10. 让世界零距离 小鱼易连的大梦想