亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法(含舉例)

 更新時間:2023年01月12日 11:15:13   作者:兔霸哥S  
今天學mysql函數(shù)的時候在自己服務器上的MySQL碰見了個奇怪的問題,下面這篇文章主要給大家介紹了關于MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法,需要的朋友可以參考下

前言?

作為初學者,我們在使用MySQL的時候總是會遇到各種各樣的報錯,讓人頭痛不已。其中有一種報錯,sql_mode=only_full_group_by,十分常見,每次都是老長的一串出現(xiàn),然后帶走你所有的好心情

出現(xiàn)這樣的報錯,并不是因為你的代碼寫得不好,而是因為在MySQL 5.7后,MySQL默認開啟了SQL_MODE嚴格模式,對數(shù)據(jù)進行嚴格校驗。如果代碼中含有group by聚合操作,那么select中的列,除了使用聚合函數(shù)之外的,如max()、min()等,都必須出現(xiàn)在group by中。

比如說,出現(xiàn)下面這種情況,就會報錯:

select Beijing,Shanghai from city group by Beijing

?如果改成這個樣子:

select Beijing,Shanghai from city group by Beijing,Shanghai

或者這個樣子:

select Beijing from city group by Beijing

就不會報錯了。

當然,這樣子隨意的改動代碼,我們可能就無法得到想要的信息了。

我們可以通過以下四種方法,解決該問題:

方法一:直接修改數(shù)據(jù)庫配置

首先,打開數(shù)據(jù)庫,輸入

select @@global.sql_mode;

這個時候,就會返回得到以下的信息:(不同電腦返回的信息可能不同)

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

如果里面包含 ONLY_FULL_GROUP_BY,那么就重新設置,在數(shù)據(jù)庫中輸入以下代碼,去掉ONLY_FULL_GROUP_BY即可:

SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

但是,當我們再一次重新啟動數(shù)據(jù)庫時,可能會恢復原樣,還是會出現(xiàn)ONLY_FULL_GROUP_BY的報錯,這就需要我們再一次修改數(shù)據(jù)庫配置。

那有沒有可以永久生效的辦法呢?當然有!參考方法二,就可以使修改數(shù)據(jù)庫配置永久生效!

方法二:修改數(shù)據(jù)庫配置(永久生效)

修改配置文件my.ini

在[mysqld]模塊下新增一行配置:

sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

運行后重啟,即可生效

方法三:使用 any_value() 或 group_concat()

1. any_value():將分到同一組的數(shù)據(jù)里第一條數(shù)據(jù)的指定列值作為返回數(shù)據(jù)。 (any_value()函數(shù)就是MySQL提供的用來抑制ONLY_FULL_GROUP_BY值被拒絕的)

select Beijing,any_value(Shanghai) from city group by Beijing

2. group_concat():將分到同一組的數(shù)據(jù)默認用逗號隔開作為返回數(shù)據(jù)

select Beijing,group_concat(Shanghai) from city group by Beijing

方法四:開動腦筋,修改代碼

舉個例子,在牛客的第206題中,就出現(xiàn)了類似的情況

https://www.nowcoder.com/practice/4a052e3e1df5435880d4353eb18a91c6?tpId=82&tqId=29764&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3DSQL%25E7%25AF%2587%26topicId%3D82&difficulty=undefined&judgeStatus=undefined&tags=&title=

題目如下:

如果我們不用上面的方法,直接用下面這種方式查詢,很明顯會出現(xiàn) ONLY_FULL_GROUP_BY 的報錯:

select dept_no,d.emp_no,max(s.salary) 
from dept_emp d 
join salaries s on d.emp_no = s.emp_no
group by d.dept_no

我們可以換一種思路:首先查詢得到2張表,一張表為員工薪資表 表a,一張表為每個部門最高員工薪資表 表b。然后通過表連接 on d.emp_no = s.emp_no 使這兩張表結合,通過on a.salary = b.salary使薪資統(tǒng)一,即這兩張表連接后的表的薪資為每個部門的最高員工薪資。最后,再通過一次查詢得到每個部門中當前員工薪水最高的相關信息。

select a.dept_no, a.emp_no, b.salary
from
    (select d.dept_no, s.emp_no, s.salary
     from dept_emp as d join salaries as s 
     on d.emp_no = s.emp_no 
    ) as a
    join
    (select d.dept_no, max(s.salary) as salary
     from dept_emp as d join salaries as s 
     on d.emp_no = s.emp_no
     group by d.dept_no
    ) as b 
    on a.salary = b.salary and a.dept_no = b.dept_no
order by a.dept_no

當然,具體問題,具體對待。遇到相差比較大的問題,就需要換一種查詢方式了。

如果需要練習此題,可以點擊文中代碼直接進入??停蛘咴谠u論區(qū)找到創(chuàng)建該題目的代碼,在電腦中運行,試一試,有沒有其他更巧妙的辦法解決這道題。

總結

到此這篇關于MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法的文章就介紹到這了,更多相關MySQL報錯sql_mode=only_full_group_by內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 利用mysql的inet_aton()和inet_ntoa()函數(shù)存儲IP地址的方法分享

    利用mysql的inet_aton()和inet_ntoa()函數(shù)存儲IP地址的方法分享

    當前很多應用都適用字符串char(15)來存儲IP地址(占用16個字節(jié)),利用inet_aton()和inet_ntoa()函數(shù),來存儲IP地址效率很高,適用unsigned int 就可以滿足需求,不需要使用bigint,只需要4個字節(jié),節(jié)省存儲空間,同時效率也高很多
    2012-03-03
  • MySQL優(yōu)化GROUP BY(松散索引掃描與緊湊索引掃描)

    MySQL優(yōu)化GROUP BY(松散索引掃描與緊湊索引掃描)

    這篇文章主要介紹了MySQL優(yōu)化GROUP BY(松散索引掃描與緊湊索引掃描),需要的朋友可以參考下
    2016-05-05
  • MySQL配置文件my.cnf中文詳解附mysql性能優(yōu)化方法分享

    MySQL配置文件my.cnf中文詳解附mysql性能優(yōu)化方法分享

    Mysql參數(shù)優(yōu)化對于新手來講,是比較難懂的東西,其實這個參數(shù)優(yōu)化,是個很復雜的東西,對于不同的網(wǎng)站,及其在線量,訪問量,帖子數(shù)量,網(wǎng)絡情況,以及機器硬件配置都有關系,優(yōu)化不可能一次性完成,需要不斷的觀察以及調(diào)試,才有可能得到最佳效果。
    2011-09-09
  • Mysql數(shù)據(jù)庫性能優(yōu)化一

    Mysql數(shù)據(jù)庫性能優(yōu)化一

    今天,數(shù)據(jù)庫的操作越來越成為整個應用的性能瓶頸了,這點對于Web應用尤其明顯。關于數(shù)據(jù)庫的性能,這并不只是DBA才需要擔心的事,而這更是我們程序員需要去關注的事情
    2016-04-04
  • 如何利用Mysql計算地址經(jīng)緯度距離實時位置

    如何利用Mysql計算地址經(jīng)緯度距離實時位置

    最近工作中遇到了一個附近門店的功能,下面這篇文章主要給大家介紹了關于如何利用Mysql計算地址經(jīng)緯度距離實時位置的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • 淺談MySQL索引優(yōu)化分析

    淺談MySQL索引優(yōu)化分析

    這篇文章主要介紹了淺談MySQL索引優(yōu)化分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • MySQL使用觸發(fā)器實現(xiàn)數(shù)據(jù)自動更新的應用實例

    MySQL使用觸發(fā)器實現(xiàn)數(shù)據(jù)自動更新的應用實例

    觸發(fā)器是非常常見的自動化數(shù)據(jù)庫操作方式,無論是在數(shù)據(jù)更新、刪除還是需要自動添加一些內(nèi)容到數(shù)據(jù)表上,觸發(fā)器都可以發(fā)揮作用,熟悉 SQL 的基本語法和一些常見的用例,可以幫助你合理地設置自己的數(shù)據(jù)庫操作流程,
    2024-01-01
  • MySQL千萬級大數(shù)據(jù)SQL查詢優(yōu)化知識點總結

    MySQL千萬級大數(shù)據(jù)SQL查詢優(yōu)化知識點總結

    在本篇文章里小編給大家整理的是一篇關于MySQL千萬級大數(shù)據(jù)SQL查詢優(yōu)化知識點總結內(nèi)容,有需要的朋友們可以學習參考下。
    2019-12-12
  • MySQL 查詢速度慢與性能差的原因與解決方法

    MySQL 查詢速度慢與性能差的原因與解決方法

    隨著網(wǎng)站數(shù)據(jù)量與訪問量的增加,MySQL 查詢速度慢與性能差的問題就日漸明顯,這里為大家分享一下解決方法,需要的朋友可以參考下
    2019-09-09
  • MySQL數(shù)據(jù)庫Shell import_table數(shù)據(jù)導入

    MySQL數(shù)據(jù)庫Shell import_table數(shù)據(jù)導入

    本文我們介紹一款高效的數(shù)據(jù)導入工具,MySQL Shell 工具集中的import_table,該工具的全稱是Parallel Table Import Utility,需要的朋友請參考下文
    2021-08-08

最新評論