数据更新问题

xidiancjw 2011-01-10 12:45:00
数据库中有两个表,表1如下:
CREATE TABLE Table1
(
ID1 INTEGER,
AAA NUMBER,
BBB NUMBER,
CCC NUMBER,
DDD NUMBER,
);其中ID1和AAA为联合主键
表2:
CREATE TABLE Table2
(
ID2 INTEGER,
AAA NUMBER,
BBB2 NUMBER,
);其中ID2和AAA为联合主键
想把表2中的BBB2字段的数据(许多行)分别放入表1中的BBB、CCC字段中,当表1和表2中的联合主键相同时用下面语句:
insert into table (ID1, AAA, BBB) select ID2, AAA, BBB2 from table2 on duplicate key update BBB = values(BBB2);
insert into table (ID1, AAA, CCC) select ID2, AAA, BBB2 from table2 on duplicate key update CCC = values(BBB2);
怎么老是提示命令未正确结束?请高手帮忙解答下,谢了

...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
update table1 set bbb=(select bbb2 from table2
where table1.id=table2.id and table1.aaa=table2.aaa)
--这个是更新数据用的

where exists(select null from table2
where table1.id=table2.id and table1.aaa=table2.aaa)
--如果没有这个 那
些table1表中不符合where table1.id=table2.id and table1.aaa=table2.aaa这个条件的语句将会被更新为null
你可以测试下
心中的彩虹 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 xidiancjw 的回复:]
数据库中有两个表,表1如下:
CREATE TABLE Table1
(
ID1 INTEGER,
AAA NUMBER,
BBB NUMBER,
CCC NUMBER,
DDD NUMBER,
);其中ID1和AAA为联合主键
表2:
CREATE TABLE Table2
(
ID2 INTEGER,
AAA NUMBER,
BBB2 N……
[/Quote]



update table1 a set (a.bbb,a.ccc)=(select b.bbb2,b.bbb2 from table2 b where b.id2=a.id1 and b.aaa=a.aaa)
where exists
(select 1 from table2 c
where a.id1=c.id2 and a.aaa=c.aaa)





  • 打赏
  • 举报
回复
[Quote=引用楼主 xidiancjw 的回复:]
数据库中有两个表,表1如下:
CREATE TABLE Table1
(
ID1 INTEGER,
AAA NUMBER,
BBB NUMBER,
CCC NUMBER,
DDD NUMBER,
);其中ID1和AAA为联合主键
表2:
CREATE TABLE Table2
(
ID2 INTEGER,
AAA NUMBER,
BBB2 N……
[/Quote]
--如果是10g或是以上版本的话可以用merge into
merge into table1
using table2
on(table1.id1=table2.id2 and table1.aaa=table2.aaa)
when matched then
update
set table1.bbb=table2.bbb2 ,table1.ccc=table2.ccc;
when not matched then
insert
values(table2.id2,table2.bbb2);
xidiancjw 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhuomingwang 的回复:]

SQL code
--这样试试
update table1 set bbb=(select bbb2 from table2
where table1.id=table2.id and table1.aaa=table2.aaa)
where exis……
[/Quote]
这个可以,能否解释下这个很长的句子中用两个where的原因以及exist的作用。
小弟刚入门,还请多指教!
xidiancjw 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lijinsheng2010 的回复:]
update table1 t1 set (t1.bbb,t1.ccc)=(select t2.bbb2,t2.bbb2 from table2 t2 where (t2.id2=t1.id1 and t2.aaa=t2.aaa) where t1.id1=t2.id2 and t1.aaa=t2.aaa;
[/Quote]
不行啊,语法有问题吧!
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xidiancjw 的回复:]
唉,是8.1版本,所以不知怎么弄啊
[/Quote]
--这样试试
update table1 set bbb=(select bbb2 from table2
where table1.id=table2.id and table1.aaa=table2.aaa)
where exists(select null from table2
where table1.id=table2.id and table1.aaa=table2.aaa)
lijinsheng2010 2011-01-10
  • 打赏
  • 举报
回复
update table1 t1 set (t1.bbb,t1.ccc)=(select t2.bbb2,t2.bbb2 from table2 t2 where (t2.id2=t1.id1 and t2.aaa=t2.aaa) where t1.id1=t2.id2 and t1.aaa=t2.aaa;
xidiancjw 2011-01-10
  • 打赏
  • 举报
回复
唉,是8.1版本,所以不知怎么弄啊
gelyon 2011-01-10
  • 打赏
  • 举报
回复
肯定会违反唯一性约束的,因为你往table1插入数据,主键是 (ID1,AAA) 两条插入的数据联合主键是一样的,肯定不行

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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