Mysql無(wú)法選取非聚合列的解決方法
1. 前言
最近升級(jí)博客,給文章頁(yè)面底部增加了兩個(gè)按鈕,可以直接跳轉(zhuǎn)到上一篇和下一篇。
如下圖所示:

實(shí)現(xiàn)這個(gè)功能的難點(diǎn)在于:數(shù)據(jù)庫(kù)怎么選取出一條記錄的前后兩條相鄰的記錄?
2. 數(shù)據(jù)庫(kù)設(shè)計(jì)
關(guān)于我文章數(shù)據(jù)庫(kù)的設(shè)計(jì)如下圖所示:

可以看到,每條記錄的身份是索引Id。因?yàn)橹坝泻芏辔恼掠涗洷粍h除了,所以,Id并不是連續(xù)的。
如果當(dāng)前文章的索引值是33,那么可以通過(guò)以下命令來(lái)得到前后相鄰的 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. 無(wú)法選取聚合列
在執(zhí)行上面命令時(shí),Mysql給了我個(gè): SELECT list is not in GROUP BY clause ... 的報(bào)錯(cuò)。經(jīng)過(guò) Google 得知,mysql 5.7以上,默認(rèn)啟動(dòng)了only_full_group_by,MySQL 就會(huì)拒絕選擇列表、條件或順序列表引用的查詢。
以下是原文:
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.)
所以,我們應(yīng)該設(shè)置sql_mode中不包含only_full_group_by選項(xiàng)。MySQL 5.7.5后only_full_group_by成為sql_mode的默認(rèn)選項(xiàng)之一,這可能導(dǎo)致一些sql語(yǔ)句失效。
進(jìn)入 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
運(yùn)行本文第二部分的 mysql 的命令,結(jié)果如下圖所示:

4. 相關(guān)鏈接
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- MySQL中聚合函數(shù)count的使用和性能優(yōu)化技巧
- MySQL常用聚合函數(shù)詳解
- MySql 中聚合函數(shù)增加條件表達(dá)式的方法
- php+mysql開(kāi)源XNA 聚合程序發(fā)布 下載
- MySQL單表查詢操作實(shí)例詳解【語(yǔ)法、約束、分組、聚合、過(guò)濾、排序等】
- MySQL查詢排序與查詢聚合函數(shù)用法分析
- MySQL使用聚合函數(shù)進(jìn)行單表查詢
- MySQL 分組查詢和聚合函數(shù)
- mysql連續(xù)聚合原理與用法實(shí)例分析
- mysql聚合統(tǒng)計(jì)數(shù)據(jù)查詢緩慢的優(yōu)化方法
相關(guān)文章
MySQL優(yōu)化之如何寫(xiě)出高質(zhì)量sql語(yǔ)句
在數(shù)據(jù)庫(kù)日常維護(hù)中,最常做的事情就是SQL語(yǔ)句優(yōu)化,因?yàn)檫@個(gè)才是影響性能的最主要因素。這篇文章主要給大家介紹了關(guān)于MySQL優(yōu)化之如何寫(xiě)出高質(zhì)量sql語(yǔ)句的相關(guān)資料,需要的朋友可以參考下2021-05-05
MySQL數(shù)據(jù)庫(kù)主機(jī)127.0.0.1與localhost區(qū)別
這篇文章主要介紹了MySQL主機(jī)127.0.0.1與localhost區(qū)別總結(jié),需要的朋友可以參考下2018-06-06
MySQL遷移到Oracle數(shù)據(jù)庫(kù)的超詳細(xì)步驟和方法總結(jié)
今天接到一個(gè)任務(wù),讓我把MySQL中的表與數(shù)據(jù)移植到Oracle中,所以這里總結(jié)下,這篇文章主要給大家介紹了關(guān)于MySQL遷移到Oracle數(shù)據(jù)庫(kù)的超詳細(xì)步驟和方法,需要的朋友可以參考下2023-11-11
DataGrip的MySQL數(shù)據(jù)導(dǎo)出和導(dǎo)入操作超詳細(xì)指南
很多時(shí)候我們會(huì)遇到需要將本機(jī)數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出或者其他數(shù)據(jù)庫(kù)數(shù)據(jù)的導(dǎo)入操作,這篇文章主要給大家介紹了關(guān)于DataGrip的MySQL數(shù)據(jù)導(dǎo)出和導(dǎo)入操作超詳細(xì)指南,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
mysql時(shí)間是varchar類型進(jìn)行比較
本文主要介紹了mysql時(shí)間是varchar類型進(jìn)行比較,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Mysql行與列的多種轉(zhuǎn)換(行轉(zhuǎn)列,列轉(zhuǎn)行,多列轉(zhuǎn)一行,一行轉(zhuǎn)多列)
在MySQL中,行轉(zhuǎn)列和列轉(zhuǎn)行都是非常有用的操作,本文就來(lái)介紹一下Mysql行與列的多種轉(zhuǎn)換,主要包括行轉(zhuǎn)列,列轉(zhuǎn)行,多列轉(zhuǎn)一行,一行轉(zhuǎn)多列,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08

