欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:數(shù)據(jù)庫 MySQL報錯:sql

柚子快報激活碼778899分享:數(shù)據(jù)庫 MySQL報錯:sql

http://yzkb.51969.com/

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

??

出現(xiàn)這樣的報錯,并不是因為你的代碼寫得不好,而是因為在MySQL 5.7后,MySQL默認開啟了SQL_MODE嚴格模式,對數(shù)據(jù)進行嚴格校驗。如果代碼中含有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

就不會報錯了。

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

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

方法一:直接修改數(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';

但是,當我們再一次重新啟動數(shù)據(jù)庫時,可能會恢復(fù)原樣,還是會出現(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

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

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

題目如下:

如果我們不用上面的方法,直接用下面這種方式查詢,很明顯會出現(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 使這兩張表結(jié)合,通過on a.salary = b.salary使薪資統(tǒ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

當然,具體問題,具體對待。遇到相差比較大的問題,就需要換一種查詢方式了。 如果需要練習(xí)此題,可以點擊文中代碼直接進入???,或者在評論區(qū)找到創(chuàng)建該題目的代碼,在電腦中運行,試一試,有沒有其他更巧妙的辦法解決這道題。

柚子快報激活碼778899分享:數(shù)據(jù)庫 MySQL報錯:sql

http://yzkb.51969.com/

推薦鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/18387573.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄