更新查询Oracle

时间:2010-12-03 08:42:38

标签: oracle

我有表TB1,其中包含以下列:

ID        |    date  
---------------------
1         |    12-JUL-10
2         |    12-JUL-10
3         |    12-JUL-10
4         |    12-JUL-10
.
.
.
10000     |    12-JUL-10

表2

ID        |    date  
---------------------
1         |    12-JAN-09
2         |    12-JUL-09
3         |    12-JUL-09
4         |    12-JUL-08
.
.
.
5800      |    12-JUL-08

如何更新table2与table1具有类似ID的日期。

谢谢:)

2 个答案:

答案 0 :(得分:3)

一般

   UPDATE table2 t2
       SET date_col = (SELECT t1.date_col
                         FROM table1 t1
                        WHERE t1.id = t2.id)
     WHERE EXISTS (
        SELECT 1
          FROM table1 t1
         WHERE t1.id = t2.id )

如果可以保证table2中的每个ID都存在于table1中(或者如果您希望date_col在没有匹配时设置为NULL),则可以消除WHERE EXISTS。但一般来说,如果有匹配的记录,你只想进行更新。

答案 1 :(得分:0)

然后还使用内联视图进行更新。这样做有点棘手,因为我认为它需要主键存在于连接的两端,否则会因错误而失败。

update (
  select 
    t1.id as t1_id, 
    t1.value as t1_date,
    t2.id as t2_id, 
    t2.value as t2_date
  from 
    table1 t1
    join table2 t2 on (t1.id = t2.id)
 )
 set t2_date = t1_date