oracle ORA-01427:单行子查询返回多个行

select*from(selecta.*,rownumrow_numfrom(selecta.directflag,(selectsheettypenamefromsh... select * from (select a.*,rownum row_num from (select a.directflag,(select sheettypename from
sheettype where id=(select sheettypeid from moduletype where moduleid=trim(a.sheetidruleid)))
sheettypename,(select code||'-'||abbrev from channel where channelid=a.outcomecustomer)
outcustomer,(select code||'-'||abbrev from channel where channelid=a.incomecustomer)
incustomer,(select balancetype from balancetypeset where id=a.balancetypeid)
balancetype,(select goodsno||'-'||goodsname from goods where goodsid=a.goodsid)
goodsnanme,a.quantity,a.price,a.amount,a.accdate from channelaccount a where 1=1
and a.incomecustomer='acd488efdcc8f4a0ae2e42ebbe8e2f72') a) where row_num>0 and row_num<=20
执行报ORA-01427:单行子查询返回多个行
求高人指点
展开
 我来答
百度网友183c468
2013-10-08 · TA获得超过209个赞
知道小有建树答主
回答量:267
采纳率:0%
帮助的人:127万
展开全部
找每个子查询的主键,只要主键没有完全包含在子查询的WHERE子句中,就有可能发生该错误。另外你可以在WHERE子句中添加and rownum<=1来解决。
不过最好还是查清原因再考虑解决方案,因为说不定就是你漏掉了某些主键条件
追问
搞不清了,求高人指点
追答
检查moduletype,sheettype,channel,balancetypeset,goods的主键分别是什么?
nietiezheng
推荐于2017-09-15 · TA获得超过5536个赞
知道大有可为答主
回答量:3132
采纳率:87%
帮助的人:1228万
展开全部
,(select sheettypename from
sheettype where id=(select sheettypeid from moduletype where moduleid=trim(a.sheetidruleid)))
可能是这个语句中的子查询返回了多个行,正常的话至允许返回一个值
追问
把=改成了in是返回多个值,但是还是报一样的错误
追答
select a.directflag,(select sheettypename from 
sheettype where id=(select sheettypeid from moduletype where moduleid=trim(a.sheetidruleid)))
其中
,(select sheettypename from
sheettype where id=(select sheettypeid from moduletype where moduleid=trim(a.sheetidruleid
部分也必须返回一个值,否则没有办法和a.directflag构成一个元组
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yjaspen
2013-10-08 · TA获得超过204个赞
知道小有建树答主
回答量:374
采纳率:0%
帮助的人:187万
展开全部
,(select sheettypename from
sheettype where id=(select sheettypeid from moduletype where moduleid=trim(a.sheetidruleid))
这里的moduleid是主键吗?还有其他主键吗?
id呢?是不是只有这一个主键,如果还有其他的,你就必须加上另外一个主键,否则取出来仍然是多条。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-08
展开全部
在你的子查询中返回多行,你的限制不全
追问
如何修改让限制完全
追答
这个就看你的需求了
select sheettypeid from moduletype where moduleid=trim(a.sheetidruleid)
你在你的数据库里先泡一下这句话,检索结果肯定是多余一行的,你看一下检索结果,然后自己限制一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式