【问题标题】:How to update table with data from another table如何用另一个表中的数据更新表
【发布时间】:2021-02-02 05:47:37
【问题描述】:

我有两张桌子

第一个表INTRA.TABLE_A

id  | first_value | second_value
----------------------------------
1   |    1234     |    181818
2   |    1235     |    1919191
3   |    1236     |    2384

第二桌EXTRA.TABLE_B

id  | first_value | second_value
----------------------------------
1   |    1235     |    1919191
2   |    1236     |    0
3   |    1234     |    0
4   |    1234     |    181818
5   |    1234     |    0
6   |    1236     |    0

我正在尝试通过更新将数据从 INTRA.TABLE_A 获取到 EXTRA.TABLE_B

UPDATE B
SET
    B.SECOND_VALUE = A.SECOND_VALUE
FROM
    EXTRA.TABLE_B B,
    INTRA.TABLE_A A
WHERE
    A.FIRST_VALUE = B.FIRST_VALUE
    AND B.SECOND_VALUE = 0;

但它在FROM word: 处“抛出”语法错误:

syntax_error

更新后的结果应该是这样的:

id  | first_value | second_value
----------------------------------
1   |    1235     |    1919191
2   |    1236     |    2384
3   |    1234     |    181818
4   |    1234     |    181818
5   |    1234     |    181818
6   |    1236     |    2384

我正在使用 sqlDeveloper 和 Oracle 数据库。我该如何解决?

【问题讨论】:

    标签: sql oracle sql-update subquery inner-join


    【解决方案1】:

    Oracle 不支持 update 查询中的连接 - 与其他数据库不同,例如 SQL Server(您正在使用的查询可能会按原样运行)。

    我会推荐一个相关的子查询:

    update table_b b
    set second_value = (select a.second_value from tablea a where a.first_value = b.first_value)
    where b.second_value = 0
    

    您可能希望添加一个条件以确保仅更新“匹配”的行:

    update table_b b
    set second_value = (select a.second_value from tablea a where a.first_value = b.first_value)
    where 
        b.second_value = 0
        and exists (select a.second_value from tablea a where a.first_value = b.first_value)
    

    【讨论】:

      【解决方案2】:

      MERGE 有什么好处吗?

      MERGE INTO table_b b
           USING table_a a
              ON (a.FIRST_VALUE = b.FIRST_VALUE)
      WHEN MATCHED
      THEN
         UPDATE SET b.second_value = a.second_value;
      

      【讨论】:

        猜你喜欢
        • 2012-06-03
        • 1970-01-01
        • 2011-06-29
        • 2019-12-27
        • 1970-01-01
        • 1970-01-01
        • 2021-01-13
        • 1970-01-01
        相关资源
        最近更新 更多