SQL Server语句转Oracle语句 'ORA-01427: 单行子查询返回多个行'.

有个SQLServer语句如下,需要转成Oracle语句updateadjustsetFBillDetailID=d.FID,FSerialNo=d.FSerialNoF... 有个SQL Server语句如下,需要转成Oracle语句
update adjust
set FBillDetailID = d.FID, FSerialNo = d.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.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice
where adjust.FBillDetailID is null
改成ORacle语句如下:
update tbloutadjustdetail set(FBillDetailID, FSerialNo) =
(select d.FID, d.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.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice)
where tbloutadjustdetail.FBillDetailID is null;
错误提示为'ORA-01427: 单行子查询返回多个行'.
请教一下,正确的该如何
用in可能不行,因为需要数据一一对应;
to Bluemonkeyy:
你的方法给我提供了一个新的思路,还真没有这么考虑过。但是存在ora-01779错误,可能是这个子查询没有索引的缘故。实际上,语句中涉及的表FID都是PK,因此这个问题还真是没找到好的解决办法。
展开
 我来答
渊总不爱洗头
2010-07-14 · 超过21用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:0
展开全部
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.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice)
where tbloutadjustdetail.FBillDetailID is null) set m.FBillDetailID=fid,
m.FSerialNo=fserialno;
ym_pang_pang
2010-07-15 · 超过11用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:40万
展开全部
select d.FID, d.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.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice

看执行结果,在判断怎样修改…… 建议你到csdn问,那里专业人士多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
spiderrobot
2010-07-14 · TA获得超过871个赞
知道小有建树答主
回答量:930
采纳率:0%
帮助的人:573万
展开全部
select d.FID, d.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.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice
这是你括弧里面的子查询,这个返回了超过一条数据,单独执行一下看看都是什么数据,是否都需要UPDATE,
是的话就用IN代替等值链接,
否的话呢加新的过滤条件到子查询里面,排除多条留下一条。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wallace7890
2010-07-14 · 超过19用户采纳过TA的回答
知道答主
回答量:116
采纳率:0%
帮助的人:56.3万
展开全部
不要用 = 用 in
向基本查询的话 SQL Server 和Qracle差不多的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiongpf88
2010-07-20
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
用in确实可以[url=http://www.baidu.com]in[/url]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式