Mysql無(wú)法選取非聚合列怎么辦-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“Mysql無(wú)法選取非聚合列怎么辦”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Mysql無(wú)法選取非聚合列怎么辦”這篇文章吧。

創(chuàng)新互聯(lián)公司主營(yíng)朔城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都APP應(yīng)用開(kāi)發(fā),朔城h5重慶小程序開(kāi)發(fā)搭建,朔城網(wǎng)站營(yíng)銷(xiāo)推廣歡迎朔城等地區(qū)企業(yè)咨詢

1. 前言

給文章頁(yè)面底部增加了兩個(gè)按鈕,可以直接跳轉(zhuǎn)到上一篇和下一篇。

如下圖所示:

Mysql無(wú)法選取非聚合列怎么辦

實(shí)現(xiàn)這個(gè)功能的難點(diǎn)在于:數(shù)據(jù)庫(kù)怎么選取出一條記錄的前后兩條相鄰的記錄?

2. 數(shù)據(jù)庫(kù)設(shè)計(jì)

關(guān)于我文章數(shù)據(jù)庫(kù)的設(shè)計(jì)如下圖所示:

 Mysql無(wú)法選取非聚合列怎么辦

可以看到,每條記錄的身份是索引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é)果如下圖所示:

Mysql無(wú)法選取非聚合列怎么辦

以上是“Mysql無(wú)法選取非聚合列怎么辦”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁(yè)標(biāo)題:Mysql無(wú)法選取非聚合列怎么辦-創(chuàng)新互聯(lián)
分享URL:http://bm7419.com/article48/hdoep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、外貿(mào)建站、用戶體驗(yàn)、網(wǎng)站制作、定制網(wǎng)站、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司