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. 在重復寫入時會出現這種問題, 可通過去掉重復數據解決
- 通過在寫入時加邏輯判斷或者外鍵防止數據重復寫入
2. 利用IN、SOME、ANY、ALL關鍵字進行限制
- 報錯信息出自子查詢, 因此需要對子查詢涉及指令進行條件修改
最終解決后的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"。原因是"="號的后面取的可以使具體的值也可以是空值,不是判斷關鍵詞,但是"IN"是會與后面的數據值進行判斷的,可以作為判斷關鍵詞。
可理解為:
子查詢就是指在一個SELECT語句中嵌套另一個SELECT語句
IN、SOME、ANY、ALL都是子查詢涉及的關鍵詞
- ANY可與= (>, >=, )結合使用,分別表示等于(大于, 大于等于, 小于, 小于等于, 不等于)其中的任何一個數據
--?ANY關鍵字必須與一個比較操作符一起使用
-- ANY關鍵詞可以理解為"對于子查詢返回的列中的任一數值, 如果比較結果為True, 則返回True"
- ALL可與= (>, >=, )結合使用,分別表示等于(大于, 大于等于, 小于, 小于等于, 不等于)其中的所有數據
--?ALL關鍵字必須與一個比較操作符一起使用
-- ALL關鍵詞可以理解為"對于子查詢返回的列中的所有值, 如果比較結果為True, 則返回True"
- 關鍵詞IN?與關鍵詞組合"=ANY"作用相同
總結
以上是生活随笔為你收集整理的mysql错误消息1_MySQL出错信息: Subquery returns more than 1 row及其解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dir在python中什么意思_pyth
- 下一篇: 30分钟学会mysql_30分钟回顾My