程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle中如何實現Mysql的兩表關聯update操作,oraclemysql

Oracle中如何實現Mysql的兩表關聯update操作,oraclemysql

編輯:Oracle教程

Oracle中如何實現Mysql的兩表關聯update操作,oraclemysql


在看《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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved