• 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
  • 相关阅读:
    Nginx.conf 配置文件详细说明
    CentOs中iptables配置允许mysql远程访问
    CentOS 6.4下编译安装MySQL 5.6.14
    CentOS6.4下Mysql数据库的安装与配置
    让nginx支持.htaccess文件实现伪静态的方法!
    MySQL导入.sql文件及常用命令
    PHP里10个鲜为人知但却非常有用的函数
    Nginx配置文件详细说明
    linux 开机启动nginx
    Redhat系列使用ISO或者光盘制作yum本地安装源
  • 原文地址:https://www.cnblogs.com/ivictor/p/5010396.html
Copyright © 2020-2023  润新知