【问题标题】:Oracle Query Update From [duplicate]Oracle 查询更新来自 [重复]
【发布时间】:2019-05-20 13:27:49
【问题描述】:

我想知道我是否可以在 Oracle 数据库中执行此查询?

UPDATE
    Table_A SET
    Table_A.col1 = Table_B.col1,
    Table_A.col2 = Table_B.col2 FROM
    Some_Table AS Table_A
    INNER JOIN Other_Table AS Table_B
        ON Table_A.id = Table_B.id WHERE
    Table_A.col3 = 'cool'

这是在 sql server (microsoft) 上工作的。但不能在 oracle db 中工作。你能告诉我原因吗?

【问题讨论】:

  • 我在问原因
  • 原因是——“Oracle 开发人员没有以这种方式实现该特性”。

标签: sql oracle


【解决方案1】:

您可以在 Oracle 中使用合并。

MERGE Into Table_A t USING Table_B s
           ON (t.id = s.id)
        when matched then UPDATE SET
    t.col1 = s.col1, t.col2 = s.col2   
       WHERE t.col3 = 'cool'

【讨论】:

    【解决方案2】:

    你可以这样做:

    UPDATE table_a SET table_a.col1 = (SELECT table_B.COl1
                                      FROM table_B 
                                      WHERE table_a.id = table_b.id),
                       table_a.col2 = (SELECT table_B.COl2
                                      FROM table_B 
                                      WHERE table_a.id = table_b.id)
    WHERE table_a.col3='cool';
    

    【讨论】:

      【解决方案3】:

      这是一种可行的方法:

      UPDATE 
      (
          SELECT a.col1 AS col1a, a.col2 AS col2a, b.col1 AS col1b, b.col2 AS col2b
          FROM Some_Table a
          INNER JOIN Other_Table b
              ON a.id = b.id
          WHERE a.col3 = 'cool'
      ) t
      SET
          a.col1a = b.col1b,
          a.col2a = b.col2b;
      

      如果 Oracle 不想运行上述操作,那么您将不得不使用相关子查询。

      【讨论】:

        猜你喜欢
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 2018-11-08
        • 2013-02-09
        • 2020-02-25
        相关资源
        最近更新 更多