Oracle 多表数据修改问题

z273894270 2011-12-14 06:39:48
现有SQL语句
UPDATE (SELECT a.volumeid, a.volume, a.newcasenum, b.casenum,
b.volumeid AS str
FROM volume a, propdat b
WHERE a.volumeid IS NULL AND a.volume = b.casenum)
SET volumeid = str

括号里查询结果显示为
VOLUMEID VOLUME NEWCASENUM CASENUM STR

null F-7-1277 9610135046 F-7-1277 656424162
null F-7-1277 9610135046 F-7-1277 656424162
null F-7-1277 9610135046 F-7-1277 656424162
null F-7-1277 9610135046 F-7-1277 656424162
null F-7-1277 9610135046 F-7-1277 656424162
null F-7-1277 9610135046 F-7-1277 656424162

现在想把str的数值赋值到volumeid里 报错

报错提示为cannot modify a column which maps to a non key-preserved tabl
求大神们给个可以解决方法或代码的SQL语句 怎么才能蒋STR里的值赋值到volumeid里 谢谢
...全文
155 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
007-x 2011-12-14
  • 打赏
  • 举报
回复
试试这个呢
UPDATE   volume a
SET volumeid =
(SELECT b.volumeid
FROM propdat b
WHERE a.volumeid IS NULL
AND a.volume = b.casenum
AND ROWNUM = 1)
WHERE EXISTS (SELECT 1
FROM propdat c
WHERE a.volumeid IS NULL AND a.volume = c.casenum)
guanghuiy 2011-12-14
  • 打赏
  • 举报
回复

[code
UPDATE volume a SET a.volumeid=(SELECT b.volumeid FROM propdat where a.volumeid IS NULL AND a.volume = b.casenum);
guanghuiy 2011-12-14
  • 打赏
  • 举报
回复
[code
UPDATE volume a SET a.volumeid=(SELECT b.volumeid FROM propdat where a.volumeid IS NULL AND a.volume = b.casenum);
/code]

个人理解,不知道是不是楼主要的。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧