Sql Oracle查询更新自

Sql Oracle查询更新自,sql,oracle,Sql,Oracle,我想知道我是否可以在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'

我想知道我是否可以在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中工作。你能告诉我原因吗?

这里有一种可能有效的方法:

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不想运行上述操作,则必须使用相关子查询。

以下是一种可能有效的方法:

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不想运行上述操作,则必须使用相关子查询。

您只需执行以下操作:

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';

您可以简单地执行以下操作:

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';

您可以在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'

您可以在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'

我问的原因是——“Oracle开发人员没有以这种方式实现该功能”。我问的原因是——“Oracle开发人员没有以这种方式实现该功能”。