首页新闻找找看学习计划

update 多条记录更新

0
悬赏园豆:20 [已解决问题] 解决于 2012-04-09 15:02

有两个大表,想用B表的内容更新A表,
两个表都很大,
A表的部分内容如下:
       A1   A2    A3  
      1      a       m
      1      b       n
      2      c       o
      3      c       p
      3      e      q

B表的部分内容如下:
    A1     A2    B3
    1       u      k
    1       p      l
    2       p     m
    3       r      n
    3       s     o

表A由A1+A3构成键, 表B由 A1+B3构成主键, 想根据表B将A2的内容UPDATE 表A中A2的内容,
如何实现呢?

liuchang8877的主页 liuchang8877 | 初学一级 | 园豆:132
提问于:2012-04-09 14:13
< >
分享
最佳答案
0

Insert into A(field1,field2,...) select value1,value2,... from B试试这种方法,适当的改进一下,根据相同字段A1建立连接,筛选结果。

收获园豆:20
轻狂の书生 | 小虾三级 |园豆:1040 | 2012-04-09 14:18

大哥,我不是要插入新的,而是要在原有基础上进行更新

liuchang8877 | 园豆:132 (初学一级) | 2012-04-09 14:19

@liuchang8877: 哦,update啊,容我再想想

轻狂の书生 | 园豆:1040 (小虾三级) | 2012-04-09 14:21

@liuchang8877: 用游标,先把B表中的数据取出来放到游标里,遍历游标,根据相同字段A1更新A表,这样应该就可以了。

轻狂の书生 | 园豆:1040 (小虾三级) | 2012-04-09 14:24

@雪拥蓝关:  我这样尝试过:

 -----------------------------------

update A a set A2=(select b.A2 from B b where b.A1=a.A1 and b.A3=a.A3 ) 

这样报错,说“单条语句查询返回多条”oracle 10g

在不用存储过程情况下,能有解决方法吗?

liuchang8877 | 园豆:132 (初学一级) | 2012-04-09 14:25

@liuchang8877: 先试一下这个方法update   A   set   A2=B.A2   from    A,   B   where   A.A1=B.A1 

轻狂の书生 | 园豆:1040 (小虾三级) | 2012-04-09 14:28

@liuchang8877: 这样的话筛选结果大于一条,赋值的话是会有异常的,可以先把结果放到游标中,遍历游标,进行赋值。

轻狂の书生 | 园豆:1040 (小虾三级) | 2012-04-09 14:33

@雪拥蓝关: 

--------------------------------

update cw_kpsz t  set t.cc=m.cc from td_cc_translate  m  where  t.ny='201109' and m.ny='201109' and t.szbz = '1' and m.kpcc=t.cc

 

实际情况语句-- 语法不过  =_=!

liuchang8877 | 园豆:132 (初学一级) | 2012-04-09 14:43

@liuchang8877: 你看看我那个语法结构,update   A   set   A2=B.A2   from    A,   B   where   A.A1=B.A1 ,from后面是两个表,貌似你那只有一个啊,改改试下,我用的是SQL数据库,语法没有问题的,不知道oracle下什么情况。不行的话就用游标做吧,也不是太麻烦。

轻狂の书生 | 园豆:1040 (小虾三级) | 2012-04-09 14:46

@雪拥蓝关: 

上面那语法还是不过

-----------------------------

update cw_kpsz  set cc=

(select m.cc from  cw_kpsz t ,td_cc_translate m

where  t.ny='201109' and m.ny='201109' and t.szbz = '1' and m.kpcc=t.cc)

这个方式 ora-01427 单条子查询多于一行

还是用游标试试吧。唉

liuchang8877 | 园豆:132 (初学一级) | 2012-04-09 14:52

@liuchang8877: 呃...一直有学习oracle的想法,资料都有,但是一直没...o(︶︿︶)o 唉,看来该狠下心来学习了。

轻狂の书生 | 园豆:1040 (小虾三级) | 2012-04-09 14:55

@雪拥蓝关: 

--------------

找到报错的解决方法了!!!

http://blog.csdn.net/jklugv/article/details/3084858

liuchang8877 | 园豆:132 (初学一级) | 2012-04-09 15:49

@liuchang8877: 哦,貌似他用的是PL/SQL,不错,学习了

轻狂の书生 | 园豆:1040 (小虾三级) | 2012-04-09 16:09
其他回答(3)
0

A表的联合主键跟B表的联合主键对应吗?

如果对应:update A set A.A2=B.A2 from B where A.A1=B.A1 and A.A3=B.B3

你试试,不知道是不是你想要的

刘满意 | 园豆:22 (初学一级) | 2012-04-09 14:43

对应......这句语法不过。。。。

支持(0) 反对(0) liuchang8877 | 园豆:132 (初学一级) | 2012-04-09 14:44

@liuchang8877: 你用的什么数据库,我用的sql通过

支持(0) 反对(0) 刘满意 | 园豆:22 (初学一级) | 2012-04-09 17:17
0

主鍵是 哪個?

無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-09 14:44

A  主键  A1+A3  , B 主键A1+B3  联合主键。

支持(0) 反对(0) liuchang8877 | 园豆:132 (初学一级) | 2012-04-09 14:45

@liuchang8877: 

update A set A.A2=( select B.A2 from B where A.A1=B.A1 and A.A3=B.B3)

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-09 14:53

@無限遐想: 

这个方式 ora-01427 单条子查询多于一行

支持(0) 反对(0) liuchang8877 | 园豆:132 (初学一级) | 2012-04-09 14:54

@liuchang8877:  那你的主鍵 有問題。或則 數據有問題。

update USERS set USERS.user_name=(select user_name from USERS B where USERS.user_id=b.user_id)

我這個語句順利執行。

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-09 15:01
0

UPDATE A set A2=B.A2  from B where A.A1+A.A3=B.A1+B.B3

死白的man | 园豆:2135 (老鸟四级) | 2012-04-09 14:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册