濮阳杆衣贸易有限公司

主頁 > 知識庫 > Mysql無法選取非聚合列的解決方法

Mysql無法選取非聚合列的解決方法

熱門標簽:高德地圖標注中心個人注冊 如何在高德地圖標注新地址 寶應電信400電話辦理費用 外呼系統(tǒng)服務 外呼系統(tǒng)防封號違法嗎 400電話辦理都選易號網(wǎng) 電銷機器人針對的 湘潭電銷機器人咨詢電話 高德地圖標注模式

1. 前言

最近升級博客,給文章頁面底部增加了兩個按鈕,可以直接跳轉到上一篇和下一篇。

如下圖所示:

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

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

關于我文章數(shù)據(jù)庫的設計如下圖所示:

 

可以看到,每條記錄的身份是索引Id。因為之前有很多文章記錄被刪除了,所以,Id并不是連續(xù)的。

如果當前文章的索引值是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. 無法選取聚合列

在執(zhí)行上面命令時,Mysql給了我個: SELECT list is not in GROUP BY clause ... 的報錯。經(jīng)過 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 5.7.5后only_full_group_by成為sql_mode的默認選項之一,這可能導致一些sql語句失效。

進入 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

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • MySQL中聚合函數(shù)count的使用和性能優(yōu)化技巧
  • MySQL常用聚合函數(shù)詳解
  • MySql 中聚合函數(shù)增加條件表達式的方法
  • php+mysql開源XNA 聚合程序發(fā)布 下載
  • MySQL單表查詢操作實例詳解【語法、約束、分組、聚合、過濾、排序等】
  • MySQL查詢排序與查詢聚合函數(shù)用法分析
  • MySQL使用聚合函數(shù)進行單表查詢
  • MySQL 分組查詢和聚合函數(shù)
  • mysql連續(xù)聚合原理與用法實例分析
  • mysql聚合統(tǒng)計數(shù)據(jù)查詢緩慢的優(yōu)化方法

標簽:佛山 馬鞍山 南充 蘭州 黃山 賀州 黔南 宿遷

巨人網(wǎng)絡通訊聲明:本文標題《Mysql無法選取非聚合列的解決方法》,本文關鍵詞  Mysql,無法,選取,非,聚合,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mysql無法選取非聚合列的解決方法》相關的同類信息!
  • 本頁收集關于Mysql無法選取非聚合列的解決方法的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    平邑县| 确山县| 西峡县| 奎屯市| 厦门市| 泰顺县| 卫辉市| 镶黄旗| 天峻县| 桑日县| 汉川市| 乌恰县| 滨州市| 华坪县| 玛曲县| 故城县| 海伦市| 祁阳县| 勐海县| 鸡东县| 科技| 平湖市| 娄底市| 若尔盖县| 湘西| 竹溪县| 高邮市| 樟树市| 衢州市| 新龙县| 珠海市| 东阿县| 沛县| 安国市| 云南省| 新龙县| 静乐县| 盈江县| 肥乡县| 招远市| 克拉玛依市|