最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言?

作為初學(xué)者,我們?cè)谑褂肕ySQL的時(shí)候總是會(huì)遇到各種各樣的報(bào)錯(cuò),讓人頭痛不已。其中有一種報(bào)錯(cuò),sql_mode=only_full_group_by,十分常見,每次都是老長(zhǎng)的一串出現(xiàn),然后帶走你所有的好心情

出現(xiàn)這樣的報(bào)錯(cuò),并不是因?yàn)槟愕拇a寫得不好,而是因?yàn)樵贛ySQL 5.7后,MySQL默認(rèn)開啟了SQL_MODE嚴(yán)格模式,對(duì)數(shù)據(jù)進(jìn)行嚴(yán)格校驗(yàn)。如果代碼中含有g(shù)roup by聚合操作,那么select中的列,除了使用聚合函數(shù)之外的,如max()、min()等,都必須出現(xiàn)在group by中。

比如說(shuō),出現(xiàn)下面這種情況,就會(huì)報(bào)錯(cuò):

select Beijing,Shanghai from city group by Beijing

?如果改成這個(gè)樣子:

select Beijing,Shanghai from city group by Beijing,Shanghai

或者這個(gè)樣子:

select Beijing from city group by Beijing

就不會(huì)報(bào)錯(cuò)了。

當(dāng)然,這樣子隨意的改動(dòng)代碼,我們可能就無(wú)法得到想要的信息了。

我們可以通過(guò)以下四種方法,解決該問(wèn)題:

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

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

select @@global.sql_mode;

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

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

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

SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

但是,當(dāng)我們?cè)僖淮沃匦聠?dòng)數(shù)據(jù)庫(kù)時(shí),可能會(huì)恢復(fù)原樣,還是會(huì)出現(xiàn)ONLY_FULL_GROUP_BY的報(bào)錯(cuò),這就需要我們?cè)僖淮涡薷臄?shù)據(jù)庫(kù)配置。

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

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

修改配置文件my.ini

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

sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

運(yùn)行后重啟,即可生效

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

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

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

2. group_concat():將分到同一組的數(shù)據(jù)默認(rèn)用逗號(hào)隔開作為返回?cái)?shù)據(jù)

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

方法四:開動(dòng)腦筋,修改代碼

舉個(gè)例子,在??偷牡?06題中,就出現(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=

題目如下:

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

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,一張表為每個(gè)部門最高員工薪資表 表b。然后通過(guò)表連接 on d.emp_no = s.emp_no 使這兩張表結(jié)合,通過(guò)on a.salary = b.salary使薪資統(tǒng)一,即這兩張表連接后的表的薪資為每個(gè)部門的最高員工薪資。最后,再通過(guò)一次查詢得到每個(gè)部門中當(dāng)前員工薪水最高的相關(guān)信息。

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

當(dāng)然,具體問(wèn)題,具體對(duì)待。遇到相差比較大的問(wèn)題,就需要換一種查詢方式了。

如果需要練習(xí)此題,可以點(diǎn)擊文中代碼直接進(jìn)入???,或者在評(píng)論區(qū)找到創(chuàng)建該題目的代碼,在電腦中運(yùn)行,試一試,有沒有其他更巧妙的辦法解決這道題。

總結(jié)

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

相關(guān)文章

  • VS2022連接數(shù)據(jù)庫(kù)MySQL并進(jìn)行基本的表的操作指南

    VS2022連接數(shù)據(jù)庫(kù)MySQL并進(jìn)行基本的表的操作指南

    鑒于MySQL數(shù)據(jù)庫(kù)的流行與強(qiáng)大,決定多學(xué)習(xí)使用,下面這篇文章主要給大家介紹了關(guān)于VS2022連接數(shù)據(jù)庫(kù)MySQL并進(jìn)行基本的表的操作指南,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • mysql重復(fù)索引與冗余索引實(shí)例分析

    mysql重復(fù)索引與冗余索引實(shí)例分析

    這篇文章主要介紹了mysql重復(fù)索引與冗余索引,簡(jiǎn)單說(shuō)明了重復(fù)索引與冗余索引的概念、應(yīng)用場(chǎng)景并結(jié)合實(shí)例形式分析了mysql重復(fù)索引與冗余索引相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • MySQL索引與事務(wù)定義到使用詳解

    MySQL索引與事務(wù)定義到使用詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)索引事務(wù),索引是為了加速對(duì)表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的存儲(chǔ)結(jié);事物是屬于計(jì)算機(jī)中一個(gè)很廣泛的概念,一般是指要做的或所做的事情,下面我們就一起進(jìn)入文章了解具體內(nèi)容吧
    2022-12-12
  • MySQL為例講解JDBC數(shù)據(jù)庫(kù)連接步驟

    MySQL為例講解JDBC數(shù)據(jù)庫(kù)連接步驟

    這篇文章主要為大家詳細(xì)介紹了MySQL為例講解JDBC數(shù)據(jù)庫(kù)連接步驟,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 數(shù)據(jù)庫(kù)Sql實(shí)現(xiàn)截取時(shí)間段和日期實(shí)例(SQL時(shí)間截取)

    數(shù)據(jù)庫(kù)Sql實(shí)現(xiàn)截取時(shí)間段和日期實(shí)例(SQL時(shí)間截取)

    在許多情況下你也許只想得到日期和時(shí)間的一部分,而不是完整的日期和時(shí)間,下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)庫(kù)Sql實(shí)現(xiàn)截取時(shí)間段和日期(SQL時(shí)間截取)的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 詳解MySQL中EXPLAIN解釋命令及用法講解

    詳解MySQL中EXPLAIN解釋命令及用法講解

    explain顯示了mysql如何使用索引來(lái)處理select語(yǔ)句以及連接表??梢詭椭x擇更好的索引和寫出更優(yōu)化的查詢語(yǔ)句
    2017-11-11
  • 在OneProxy的基礎(chǔ)上實(shí)行MySQL讀寫分離與負(fù)載均衡

    在OneProxy的基礎(chǔ)上實(shí)行MySQL讀寫分離與負(fù)載均衡

    基于Libevent機(jī)制實(shí)現(xiàn),單個(gè)實(shí)例可以實(shí)現(xiàn)25萬(wàn)的SQL轉(zhuǎn)發(fā)能力,用一個(gè)OneProxy節(jié)點(diǎn)可以帶動(dòng)整個(gè)MySQL集群,為業(yè)務(wù)發(fā)展貢獻(xiàn)一份力量,下面由小編來(lái)為大家簡(jiǎn)單說(shuō)說(shuō)
    2019-05-05
  • MySQL五步走JDBC編程全解讀

    MySQL五步走JDBC編程全解讀

    JDBC是指Java數(shù)據(jù)庫(kù)連接,是一種標(biāo)準(zhǔn)Java應(yīng)用編程接口(?JAVA?API),用來(lái)連接?Java?編程語(yǔ)言和廣泛的數(shù)據(jù)庫(kù)。從根本上來(lái)說(shuō),JDBC?是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問(wèn)到底層數(shù)據(jù)庫(kù),本篇文章我們來(lái)了解MySQL連接JDBC的五步走流程方法
    2022-01-01
  • MySQL中如何增加字段SQL語(yǔ)句

    MySQL中如何增加字段SQL語(yǔ)句

    這篇文章主要介紹了MySQL中如何增加字段SQL語(yǔ)句問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • mysql 5.7.17 免安裝版配置方法圖文教程(windows10)

    mysql 5.7.17 免安裝版配置方法圖文教程(windows10)

    這篇文章主要為大家詳細(xì)介紹了windows10下mysql 5.7.17 免安裝版配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評(píng)論

临颍县| 黄石市| 宜昌市| 穆棱市| 南木林县| 紫阳县| 昌图县| 宁阳县| 越西县| 洪湖市| 玉溪市| 壤塘县| 枣强县| 治县。| 新密市| 镇沅| 临清市| 华坪县| 虞城县| 定安县| 连江县| 广灵县| 深泽县| 永登县| 泰安市| 惠来县| 平度市| 深水埗区| 安陆市| 分宜县| 芜湖市| 和林格尔县| 太仓市| 临湘市| 临沂市| 龙游县| 厦门市| 隆化县| 阿瓦提县| 大余县| 呼玛县|