mysql错误消息1_MySQL出错信息: Subquery returns more than 1 row及其解决方法
- 問題:?查詢當"課程" 等于子查詢里面的課程信息
-?出錯指令:?[Err] 1242 - Subquery returns more than 1 row
開始出錯時的SQL
-- 省略部分
CASE WHEN kcmc = (SELECTkcmcFROM t_sdrs_xscj WHERE xh in (2013210254)AND KCMC NOT IN(SELECT kk.kcmc FROM(SELECT kcmc,max(CJ) mcjFROM t_sdrs_xscj WHERE xh in (2013210254)
GROUP BYkcmcHAVING COUNT(kcmc)=2)kk
-- 省略部分
-?報錯信息:
ERROR 1242 (21000): Subquery returns more than 1 row
-?報錯信息翻譯:
子查詢返回超過1行
-?分析與解決方法:
1. 在重復寫入時會出現(xiàn)這種問題, 可通過去掉重復數(shù)據(jù)解決
- 通過在寫入時加邏輯判斷或者外鍵防止數(shù)據(jù)重復寫入
2. 利用IN、SOME、ANY、ALL關(guān)鍵字進行限制
- 報錯信息出自子查詢, 因此需要對子查詢涉及指令進行條件修改
最終解決后的SQL
--省略部分
CASE
WHEN kcmc IN(SELECTkcmcFROM t_sdrs_xscj WHERE xh in (2013210254)AND KCMC NOT IN(SELECT kk.kcmc FROM(SELECT kcmc,max(CJ) mcjFROM t_sdrs_xscj WHERE xh in (2013210254) GROUP BYkcmcHAVING COUNT(kcmc)=2)kk--省略部分
//其實就是將"="號 改為"IN"。原因是"="號的后面取的可以使具體的值也可以是空值,不是判斷關(guān)鍵詞,但是"IN"是會與后面的數(shù)據(jù)值進行判斷的,可以作為判斷關(guān)鍵詞。
可理解為:
子查詢就是指在一個SELECT語句中嵌套另一個SELECT語句
IN、SOME、ANY、ALL都是子查詢涉及的關(guān)鍵詞
- ANY可與= (>, >=, )結(jié)合使用,分別表示等于(大于, 大于等于, 小于, 小于等于, 不等于)其中的任何一個數(shù)據(jù)
--?ANY關(guān)鍵字必須與一個比較操作符一起使用
-- ANY關(guān)鍵詞可以理解為"對于子查詢返回的列中的任一數(shù)值, 如果比較結(jié)果為True, 則返回True"
- ALL可與= (>, >=, )結(jié)合使用,分別表示等于(大于, 大于等于, 小于, 小于等于, 不等于)其中的所有數(shù)據(jù)
--?ALL關(guān)鍵字必須與一個比較操作符一起使用
-- ALL關(guān)鍵詞可以理解為"對于子查詢返回的列中的所有值, 如果比較結(jié)果為True, 則返回True"
- 關(guān)鍵詞IN?與關(guān)鍵詞組合"=ANY"作用相同
總結(jié)
以上是生活随笔為你收集整理的mysql错误消息1_MySQL出错信息: Subquery returns more than 1 row及其解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dir在python中什么意思_pyth
- 下一篇: 30分钟学会mysql_30分钟回顾My