Oracle中如何實現Mysql的兩表關聯update操作
在看《MySQL 5.1參考手冊》的時候,發現MySQL提供了一種兩表關聯update操作。原文如下:
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
在MySQL中構造表驗證了一下
mysql> select * from test;
+------+--------+
| id | salary |
+------+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+------+--------+
3 rows in set (0.00 sec)
mysql> select * from test1;
+------+--------+
| id | salary |
+------+--------+
| 1 | 400 |
| 2 | 500 |
+------+--------+
2 rows in set (0.00 sec)
mysql> update test,test1 set test.salary=test1.salary where test.id=test1.id;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from test;
+------+--------+
| id | salary |
+------+--------+
| 1 | 400 |
| 2 | 500 |
| 3 | 300 |
+------+--------+
3 rows in set (0.00 sec)
不難看出,上述兩表關聯update中只更新了test中id為1和id為2的行。
尋思了一下,Oracle中好像並沒有提供兩表關聯的update操作,同樣輸入了上述語句,Oracle報錯,報錯信息如下:
SQL> update test,test1 set test.salary=test1.salary where test.id=test1.id;
update test,test1 set test.salary=test1.salary where test.id=test1.id
*
第 1 行出現錯誤:
ORA-00971: 缺失 SET 關鍵字
後來,查了查官方文檔,這種語法並不支持,那麼Oracle中如何實現MySQL中的這種效果呢?
鼓搗了一下,雖然出來了,但還是略為復雜。
SQL> update test set test.salary=(select salary from test1 where test1.id=test.id)
where exists (select 1 from test1 where test1.id=test.id);
已更新2行。
SQL> select * from test;
ID SALARY
---------- ----------
1 400
2 500
3 300