- 问题: 查询当"课程" 等于子查询里面的课程信息
- 出错指令: [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--省略部分
//其实就是将"