Oracle中如何实现Mysql的两表关联update操作

页面导航:首页 > 数据库 > oracle > Oracle中如何实现Mysql的两表关联update操作

Oracle中如何实现Mysql的两表关联update操作

来源: 作者: 时间:2016-01-20 09:40 【

在看《MySQL 5.1参考手册》的时候,发现MySQL提供了一种两表关联update操作。原文如下:UPDATE items,month SET items.price=month.priceWHERE items.id=month.id;在MySQL中构造表验证了一下mysql select...
在看《MySQL 5.1参考手册》的时候,发现MySQL提供了一种两表关联update操作。原文如下:
 
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
 
在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的行。
 
寻思了一下,中好像并没有提供两表关联的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
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<