sql - 更新多个表的查询

标签 sql oracle sql-update

我有这样的架构:

  • 员工(eno、ename、zip、hdate)
  • 客户(cno、cnmae、街道、 zip 、电话)
  • 邮政编码( zip 、城市)

其中 zip 在邮政编码中是 pk,在其他表中是 fk。
我必须编写一个更新查询,将整个数据库中所有出现的邮政编码 4994 更新为 1234。

update zipcodes,customers,employees  
  set zip = 0  
where customers.zip = zipcodes.zip 
  and employees.zip = zipcodes.zip;  

但我知道我做的不对。有没有办法在单个更新查询中更新所有表 zip?

最佳答案

Oracle 不支持多表更新语句。

  1. 确认 ZIPCODES 表中存在邮政编码“1234”

    INSERT INTO ZIPCODES 
      (zip, city)
    VALUES
      (1234, '?')
    
  2. 为 CUSTOMERS 和 EMPLOYEES 表编写单独的更新语句:

    UPDATE CUSTOMERS
       SET zip = 1234
     WHERE zip = 4994
    
    UPDATE EMPLOYEES
       SET zip = 1234
     WHERE zip = 4994
    
  3. 删除之前的代码:

    DELETE FROM ZIPCODES
     WHERE zip = 4994
    

关于sql - 更新多个表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2399380/

相关文章:

sql - 使用唯一数据更新 SQL Server 中的 500,000 行

sql - HABTM多 "and"查询

java - 将空列表发送到存储过程

sql - 提高 Oracle 和 Postgres 中的查询性能

php - 获取 MySQL UPDATE 中所有受影响的行

php - 如果 ROW2 包含 "string",则 MySQL 更改 ROW1

SQL -VB - 即使 if 为真,它是否评估 else ?

sql - 两个计数语句之间的区别

MySQL:更新语句期间为 "Unknown column in where clause"

sql - 计算整个表的哈希值的最快方法