当前位置: 代码迷 >> Oracle技术 >> 单行子查询返回多行解决思路
  详细解决方案

单行子查询返回多行解决思路

热度:84   发布时间:2016-04-24 08:32:59.0
单行子查询返回多行
今天这个sql语句报了一个单行子查询返回多行的错误
SQL code
select t.*,        (select t_evolve_weekevolve         from t_mk_mission         where t_evolve_id = t.t_plan_id           and t_evolve_week = t.t_plan_week           and t_sys_flag <> -1) as weekevolve  from T_MK_PLAN t where t.t_plan_submitflag <> 0   and t.t_plan_week = 4   and t.t_plan_deptid = 48000147100   and t.T_PLAN_YEAR = 2011   and t.t_sys_flag <> -1 order by t.t_plan_id desc

从网上查了一下,看到一个例子
select 名字,姓氏 from 雇员 where 薪金 = (select 薪金 from 雇员 where 部门标识 =20);
这个例子看懂了,但是上面那个是怎么回事?求高手指教。

------解决方案--------------------
SQL code
select t_evolve_weekevolve         from t_mk_mission         where t_evolve_id = t.t_plan_id           and t_evolve_week = t.t_plan_week           and t_sys_flag <> -1
------解决方案--------------------
根据你的条件T_MK_PLAN 表中的一条数据,在 t_mk_mission表中有多条数据对应。
------解决方案--------------------
(select t_evolve_weekevolve
from t_mk_mission
where t_evolve_id = t.t_plan_id
and t_evolve_week = t.t_plan_week
and t_sys_flag <> -1)

这个子查询返回了多个结果(即有多条记录满足当前的查询条件),就会出现上述错误。
如果该返回结果,只有一条记录,则不会出现错误。
------解决方案--------------------
探讨
select t.*,--查询 T_MK_PLAN 表(别名t)里的所有字段
(select t_evolve_weekevolve
from t_mk_mission
where t_evolve_id = t.t_plan_id
and t_evolve_week = t.t_plan_week
and t_sys_flag <> -1) as weekevolve--把这个查询……

------解决方案--------------------
能上几行数据看看么
------解决方案--------------------
这种情况有可能是数据问题,除了异常.先检查数据是否合法.

如果合法,只能修改语句了
  相关解决方案