【问题标题】:SQL update with joins带连接的 SQL 更新
【发布时间】:2011-09-22 02:07:47
【问题描述】:

我有当前从 table2.oldData 填充的数据 table1.fieldToChange...但我想更新它并将其更改为 table2。新数据

这是我用来尝试实现此目的的代码:

UPDATE table1
SET table1.fieldToChange =
  (SELECT table2.newData
  FROM table2
  WHERE table2.oldData = table1.newData
  ) ;

但我收到“ORA-01427”错误。

table2.newDatatable2.oldData 都是唯一标识符,在数据库中只使用一次。任何帮助将不胜感激!

谢谢

【问题讨论】:

    标签: sql oracle join sql-update


    【解决方案1】:

    不确定这是否适用于 Oracle,但在 MS SQL 中您可以这样做:

    UPDATE table1
    SET fieldToChange = table2.newData
    FROM table2  
    WHERE table2.oldData = fieldToChange
    

    请注意,正在更新的表上不能有别名。

    【讨论】:

    • 谢谢,刚刚尝试过,但收到“命令未正确结束”消息:(
    【解决方案2】:

    ORA-01427 表示您在子查询中返回多个值。修改您的查询以包含 DISTINCT 子句或其他一些机制来唯一标识子查询中的行。

    UPDATE table1
    SET table1.fieldToChange =
      (SELECT DISTINCT table2.newData
      FROM table2
      WHERE table2.oldData = table1.newData
      ) ;
    

    【讨论】:

    • 除非您使用主键,否则您还需要添加 TOP 1 以确保绝对安全
    • 非常感谢两者,但不幸的是,无论 table1.fieldToChange 设置为什么,它都会返回相同的结果
    • 您的查询,或者至少您提供的伪代码是否不正确?我发现在编写更新语句以首先将它们写为 SELECT 以确保我得到预期的结果时很有帮助(注释掉 Update 行并将 SET 设置为 SELECT)。
    【解决方案3】:

    试试MERGE statement

    MERGE INTO table1 tgt
    USING (SELECT newData,oldData 
             FROM table2
            WHERE table2.oldData = table1.newData) src
    ON (src.oldData = tgt.newData)
    WHEN MATCHED THEN
      UPDATE SET tgt.fieldToChange = src.newData;
    

    【讨论】:

    • 谢谢,但我收到一个无效的标识符错误,我似乎无法压缩:/
    • 如果您将您正在使用的实际 sql 写给我们可能会有所帮助
    • 合并到“员工”a 使用(从“位置”中选择“位置代码”、“位置添加1”,其中“位置”。“位置添加1”=“员工”。“位置代码”)b ON(b。 "Location_Add1" = a."Gp_Nearest_Station") 匹配后更新设置 a."Gp_Nearest_Station" = b."Location_Code";
    【解决方案4】:

    你不是说吗?

    UPDATE table1
    SET fieldToChange =
      (SELECT table2.newData
      FROM table2
      WHERE table2.oldData = table1.fieldToChange     ---- and NOT table1.newData ?
      ) ;
    

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2011-05-05
      • 2015-04-29
      相关资源
      最近更新 更多