1. 程式人生 > >oracle update 幾種方法容易理解和使用的更新命令

oracle update 幾種方法容易理解和使用的更新命令

      習慣了SQL server的update寫法,感覺如此優雅和簡便,近期要用oracle,是如此的不方便。經過努力發現三種寫法還是很不錯的,真不愧是大佬。

    例子:兩個表,結構相同,都有編號和名稱。

          create table tb1(
              id int not null primary key,
              name varchar(100)
          );
          create table tb2(
              id int not null primary key,
              name varchar(100)
          );

插入測試資料:
insert into tb1
 select 1,'武漢' from dual union all select 2, '鄭州' from dual
  union all select 3, '上海' from dual union all select 4, '廣州' from dual

insert into tb2
 select 1,'' from dual union all select 2, '' from dual
  union all select 3, '' from dual union all select 4, '' from dual union all select 5, '' from dual

第一個表資料  select * from tb1

編號  名稱

1武漢
2鄭州
3上海
4廣州

第二個表資料  select * from tb2

編號  名稱

1
2
3
4
5

現在開始更新tb2中的name欄位。

SQLserver的寫法 update a set a.name = b.name from tb2 a, tb1 b where a.id = b.id

oracle的寫法:

寫法一:update (select a.id, a.name namea, b.name nameb from tb1 a, tb2 b where a.id = b.id) t
set t.nameb = t.namea

寫法二:update tb2 b set name = (select a.name from tb1 a where a.id = b.id)

寫法三:merge into tb2 b
using(select a.id, a.name namea from tb1 a )t
on (b.id = t.id)
when matched then update set b.name = t.namea
二和三在更新時都沒問題,能成功。

但是寫法一經常會報錯誤“無法修改與非鍵值儲存表對應的列”,要求B表必須有主鍵且返回唯一行。