国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL報錯:sql_mode=only_full_group_by 4種解決方法含舉例,輕松解決ONLY_FULL_GROUP_BY的報錯問題

這篇具有很好參考價值的文章主要介紹了MySQL報錯:sql_mode=only_full_group_by 4種解決方法含舉例,輕松解決ONLY_FULL_GROUP_BY的報錯問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

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

??sql_mode=only_full_group_by,SQL,mysql,sql,數(shù)據(jù)庫

出現(xiàn)這樣的報錯,并不是因?yàn)槟愕拇a寫得不好,而是因?yàn)樵贛ySQL 5.7后,MySQL默認(rèn)開啟了SQL_MODE嚴(yán)格模式,對數(shù)據(jù)進(jìn)行嚴(yán)格校驗(yàn)。如果代碼中含有g(shù)roup 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

就不會報錯了。

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

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

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

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

select @@global.sql_mode;

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

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

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

SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

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

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

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

修改配置文件my.ini

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

sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

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

方法三:使用 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ù)默認(rèn)用逗號隔開作為返回數(shù)據(jù)

sql_mode=only_full_group_by,SQL,mysql,sql,數(shù)據(jù)庫

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

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

舉個例子,在??偷牡?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=

題目如下:

sql_mode=only_full_group_by,SQL,mysql,sql,數(shù)據(jù)庫

  1. 如果我們不用上面的方法,直接用下面這種方式查詢,很明顯會出現(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
  1. 我們可以換一種思路:首先查詢得到2張表,一張表為員工薪資表 表a,一張表為每個部門最高員工薪資表 表b。然后通過表連接 on d.emp_no = s.emp_no 使這兩張表結(jié)合,通過on a.salary = b.salary使薪資統(tǒng)一,即這兩張表連接后的表的薪資為每個部門的最高員工薪資。最后,再通過一次查詢得到每個部門中當(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)然,具體問題,具體對待。遇到相差比較大的問題,就需要換一種查詢方式了。
如果需要練習(xí)此題,可以點(diǎn)擊文中代碼直接進(jìn)入???,或者在評論區(qū)找到創(chuàng)建該題目的代碼,在電腦中運(yùn)行,試一試,有沒有其他更巧妙的辦法解決這道題。文章來源地址http://www.zghlxwxcb.cn/news/detail-836021.html

到了這里,關(guān)于MySQL報錯:sql_mode=only_full_group_by 4種解決方法含舉例,輕松解決ONLY_FULL_GROUP_BY的報錯問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL運(yùn)維實(shí)戰(zhàn)(4.3) SQL_MODE之ONLY_FULL_GROUP_BY

    作者:俊達(dá) 設(shè)置ONLY_FULL_GROUP_BY時,對有GROUP BY子句SQL,SELECT的字段要么是GROUP BY中的字段,要么對字段進(jìn)行聚合運(yùn)算(如 SUM、COUNT 等),否則SQL執(zhí)行報錯。 不設(shè)置ONLY_FULL_GROUP_BY則允許更寬松的行為,即使查詢違反了這一規(guī)則,MySQL 也會接受,即對于不在GROUP BY字段,不使用聚

    2024年01月19日
    瀏覽(23)
  • mysql 8.0 找不到my.ini配置文件以及報sql_mode=only_full_group_by解決方案

    sql_mode=only_full_group_by問題產(chǎn)生原因:MySQL 5.7.5及以上功能依賴檢測功能。如果啟用了ONLY_FULL_GROUP_BY SQL模式(默認(rèn)情況下),MySQL將拒絕選擇列表,HAVING條件或ORDER BY列表的查詢引用在GROUP BY子句中既未命名的非集合列,也不在功能上依賴于它們。 1、navcat中新建查詢: select @@

    2024年01月23日
    瀏覽(16)
  • this is incompatible with sql_mode=only_full_group_by

    this is incompatible with sql_mode=only_full_group_by

    查看配置 select @@global.sql_mode 在sql命令行中輸入select @@sql_mode 能夠看到sql_mode配置,如果有ONLY_FULL_GROUP_BY,則需要修改 在mysql5.7.5后,ONLY_FULL_GROUP_BY是默認(rèn)選項(xiàng),所以就會導(dǎo)致group by的問題 set sql_mode=‘復(fù)制去掉ONLY_FULL_GROUP_BY’; 當(dāng)然這樣處理也只是暫時的,要想永久的處理還得去

    2024年02月15日
    瀏覽(22)
  • SQL語句錯誤this is incompatible with sql_mode=only_full_group_by解決方法

    SQL語句錯誤this is incompatible with sql_mode=only_full_group_by解決方法

    一、原理層面 這個錯誤發(fā)生在mysql 5.7.5 版本及以上版本會出現(xiàn)的問題: mysql 5.7.5版本以上默認(rèn)的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,這個配置嚴(yán)格執(zhí)行了\\\"SQL92標(biāo)準(zhǔn)\\\"。 很多從5.6升級到5.7時,為了語法兼容,大部分都會選擇調(diào)整sql_mode,使其保持跟5.6一致,為了盡量兼容程序。

    2024年01月21日
    瀏覽(25)
  • 解決MySQL-this is incompatible with sql_mode=only_full_group_by 問題(提供window、Linux、docker解決方法和流程)

    解決MySQL-this is incompatible with sql_mode=only_full_group_by 問題(提供window、Linux、docker解決方法和流程)

    出現(xiàn)這個問題是因?yàn)椋瑢τ贕ROUP BY操作,如果在SELECT中的列,沒有在GROUP BY中出現(xiàn),那么這個SQL是不合法的,因?yàn)榱胁辉贕ROUP BY從句中。 也就是說如果我分組查詢,比如我表里有三個字段 id、name、type,我根據(jù)type分組查詢,那么結(jié)果集里就不能包含name字段。 要想解決這個問題

    2024年02月04日
    瀏覽(23)
  • mysql sql_mode數(shù)據(jù)驗(yàn)證檢查

    mysql sql_mode數(shù)據(jù)驗(yàn)證檢查

    sql_mode 功能 sql_mode 會影響MySQL支持的sql語法以及執(zhí)行的 數(shù)據(jù)驗(yàn)證檢查 。通過設(shè)置sql_mode ,可以完成不同嚴(yán)格程度的數(shù)據(jù)校驗(yàn),有效地保障數(shù)據(jù)準(zhǔn)確性 sql_mode 嚴(yán)格模式 VS 寬松模式 寬松模式 比如,插入的數(shù)據(jù)不滿足 表的數(shù)據(jù)類型,也可能接受,并且不報錯,只會有警告而且。

    2024年02月10日
    瀏覽(21)
  • MySQL運(yùn)維實(shí)戰(zhàn)(4.2) 關(guān)于SQL_MODE

    作者:俊達(dá) 早期,MySQL對一些不符合SQL標(biāo)準(zhǔn)的SQL語句和數(shù)據(jù)的容忍度比較高,可能會自主地執(zhí)行或轉(zhuǎn)換一些語句。但是,隨著MySQL 5.7的推出,對默認(rèn)的SQL模式進(jìn)行了修改,更加強(qiáng)調(diào)SQL的合規(guī)性,這種變化是為了提高數(shù)據(jù)一致性和統(tǒng)一SQL標(biāo)準(zhǔn)。系統(tǒng)在升級MySQL版本時,特別是從

    2024年01月17日
    瀏覽(49)
  • 關(guān)系數(shù)據(jù)庫-9-[mysql8]中的語法校驗(yàn)規(guī)則sql_mode應(yīng)用

    Mysql中sql_mode使用詳解 sql_mode是一組mysql的語法校驗(yàn)規(guī)則,定義了mysql應(yīng)該支持的sql語法、數(shù)據(jù)校驗(yàn)等。 1.3.1 ANSI模式 這是一種寬松模式,該模式下,會對所操作數(shù)據(jù)進(jìn)行校驗(yàn),如果不符合校驗(yàn)規(guī)則,數(shù)據(jù)會按照規(guī)則執(zhí)行,并報warning警告。 1.3.2 STRICT_TRANS_TABLES模式 這是一種嚴(yán)格

    2024年02月02日
    瀏覽(21)
  • MySQL運(yùn)維實(shí)戰(zhàn)(4.6) SQL_MODE之NO_BACKSLASH_ESCAPES

    作者:俊達(dá) 在MySQL中,默認(rèn)情況下,反斜杠()被用作轉(zhuǎn)義字符,轉(zhuǎn)義反斜杠()后一個字符;當(dāng)設(shè)置NO_BACKSLASH_ESCAPES后,反斜杠()將不作為轉(zhuǎn)義字符,而被視為普通字符。 下面是一個示例,說明了這兩種情況的區(qū)別: 未設(shè)置NO_BACKSLASH_ESCAPES模式 設(shè)置NO_BACKSLASH_ESCAPES 總之,N

    2024年01月23日
    瀏覽(24)
  • MySQL運(yùn)維實(shí)戰(zhàn)(4.4) SQL_MODE之STRICT_TRANS_TABLES和STRICT_ALL_TABLES

    作者:俊達(dá) 在MySQL中,STRICT模式主要用于控制數(shù)據(jù)庫的行為,有助于保持?jǐn)?shù)據(jù)的一致性和完整性,特別是在涉及到數(shù)據(jù)寫入、更新和其他操作時的約束。 如果設(shè)置STRICT模式,MySQL會更加嚴(yán)格地執(zhí)行數(shù)據(jù)寫入和更新等操作,當(dāng)數(shù)據(jù)不符合字段定義或者違反了約束條件,MySQL將拋

    2024年01月18日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包