sql语句单行子查询返回多个行的问题
真晕,这么多层的查询。
你自个一层一层的去调试不就得了。
做法:先试最内层的那一句
select u.yh_mc from t_xt_yh u where u.YH_ID=t.updator
如果没问题,再试:
select
t.pid,
t.portal_name,
t.portal_type,
t.remark,
t.file_name,
(
select u.yh_mc from t_xt_yh u where u.YH_ID=t.owner
) owner,
t.create_time,
t.status,
(
select u.yh_mc from t_xt_yh u where u.YH_ID=t.updator
)
updator,
t.update_time
from t_xt_portal t
……
一层一层试下去。看问题出在哪儿。
养成良好的缩进式代码编写习惯,会对你有很大帮助。
由于查询结果有多行造成,确保查询结果只有一行数据。这样就不会报错了。
【错误例子】
“select a.id,a.case_id,e.case_name,e.case_code,(select enddate from ol_apply_process where id=a.id and result =10) as enddate from ol_apply a,ol_case e”,报错ORA-01427:单行子查询返回多个行。
解决方法:
查询中肯定有返回多行的情况,试着在子查询中加入rownum<2,也就是限制返回一行数据。
更改后的:
“select a.id,a.case_id,e.case_name,e.case_code,(select enddate from ol_apply_process where id=a.id and result =10 and rownum=1) as enddate from ol_apply a,ol_case e”。
如果是sql server这样写
select (select top 1 grade from sc where sc.sno=t.sno) as 数据库 from sc t;
oracle这样写
select (select grade from sc where sc.sno=t.sno and rownum=1) as 数据库 from sc t;
首先看你的数据,就一张表,不知道你为什么要自己跟自己关联进行查询,明明可以一次查出来,非得多关联一次。
select grade from sc where cno='c001'
这样就搞定了。
然后说说返回多行的问题,因为第二次执行的时候,没有限制cno等于c001,导致把所有cno的列多查出来了,所以返回多行,而第一次执行,至返回一条cno为c001的数据。
给你个建议,估计你是把项目中的一段代码粘贴出来了,原来的代码中,可能有其他关联条件或者逻辑算法,导致你非得sc表和sc表进行了一次关联,尽量不要用这种关联,如果数据量很大,这样两个大表关联查询,会很慢,性能肯定低。
看数据,那可不就返回多行了
韶威强力: 说明你有个条件查询子句,返回多个结果,所以才会报错
衡阳县15069962614: 查询每个员工10月的日平均销售额的SQL语句,提示单行子查询输出多行!大神给看看 - ?
韶威强力: g.员工编号=(select(销售额) from salesgrade) 这边右边select查出的结果是多个,和左边不对应
衡阳县15069962614: 求UPDATE语句,现在单行子查询返回多个行 - ?
韶威强力: 在执行UPDATE 语句的时候,如果关联表更新的时候,下面几条语句 1--只能在DB2,ORACLE下执行,SQL SERVER 报"a"语法错 UPDATE MAM_SUBJECTITEM a SET a.ICON_FILE= (SELECT c.FIELD_1 FROM MCM_NAVIGATION c ...
衡阳县15069962614: sql子查询最多能返回一个记录如何解决 - ?
韶威强力: 你是要返回一个值?返回多个说明数据库中满足你查询条件的记录有多个,要返回一个就说明你的查询条件不够,再加条件控制就行了,比如在语句末尾再加 and ***='***'; 如果你问的是如何在后台程序中接收的话,用List可以,一个节点接收Result的一行值,读取的时候遍历List就行了.
衡阳县15069962614: ORACLE执行语句返回'单行子查询返回多个行'怎么解决?在线等 - ?
韶威强力: update (select d.fid as fid, d.fserialno as fserialno,m.fbilldetailid,m.fserialno from tblproductout m inner join tblproductoutdetail d on m.fid = d.fheaderid inner join tbloutadjustdetail adjust on m.fdate = adjust.findate and m.fno = adjust.finno and d....
衡阳县15069962614: 小弟 刚学oracle 写了批量更新提示 单行子查询返回多行 那位高手能不能帮忙改下吗 - ?
韶威强力: 1.确认xs0701是否有重复的xs0101id.2.若xs0701的xs0101id无重复情况,则确认以下查询是否有重复的xs0101id.select xs0701_lsb.ssxwzs, xs0101.xs0101id from xs0701_lsb, xs0101 where xs0701_lsb.xh = xs0101.xh 若有重复记录,就需要楼...
衡阳县15069962614: oracle decode中可以使用sql语句吗 - ?
韶威强力: 可以使用sql,不过要注意:1、SQL语句一定要用()括起来,不然会报错ORA-00936:缺失表达式;2、SQL语句返回的结果不能有多行,不然会报错ORA-01427:单行子查询返回多个行.
衡阳县15069962614: sql语句 一行转多行 - ?
韶威强力: 用一个循环. 先用参数取到到底要变成多少行,和单价 declare @t int declare @sal nvarchar(8) 根据需求或实际情况将应变为多少行这个烤取给变量@t,单价取给@sal 设置循环的起始数值 declare @i int set @i=1 开始循环 while(@i<=@t) begin --将单行的数据插入需要的表 insert into(……) values(……) --循环参数自增 set @i=@i+1 end
衡阳县15069962614: SQL语句的问题 当子查询返回多值的时候 我用什么语句去达到IN的效果呢? - ?
韶威强力: 对于in 和 exists的性能区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists. 其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系. 另外IN是不对NULL进行处理.
衡阳县15069962614: SQL语句子查询问题,我想返回多个值可以吗 - ?
韶威强力: 如果xmCode字段值对应check_item的话select a.check_item_name , b.xmcode from check_items a,capitalAccount b where a.check_item=b.xmCode 是可以的,如果不对应,就得找两个表能关联的字段值写在where 语句中.另外还可以用外连接取出01、02、03等等的check_item_name .