【问题标题】:SQL Update query to update one column from 2 tablesSQL 更新查询以更新 2 个表中的一列
【发布时间】:2017-02-10 15:01:22
【问题描述】:

我有表 table1 和表 2 这是选择语句。

SELECT table1_column1, table1_column2, table1_column3, table2_column1,
        table2_column2, table2_column3
FROM table1
   , table2
WHERE table1_column1 = table2_column1
  AND table1_column2 = 'A'
  AND table1_column3 <> table2_column3

我得到 table1_column3 和 table2_column3 具有不同值的结果。这是正确的。

我想用 table1_column3 更新和替换所有 table2_column3 值 我的更新 sql 语句给了我 ORA-00936: missing expression error。

【问题讨论】:

  • 那么你的UPDATE声明是什么?
  • “更新 all 的 table2_column3 值”是什么意思?该查询仅针对table1_column2 = 'A' 中的行 - 在table1 中是否仍有至少一行对应于table2 中的每个 行?

标签: sql oracle


【解决方案1】:

当您必须根据另一个表中的值更新(或插入)一个表时,请考虑使用merge 语句而不是update/insert

https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF01606

在您的情况下,您似乎正在尝试这样做:

merge into table2 t2
  using table1 t1
    on (t1.column1 = t2.column1 and t1.column2 = 'A')
when matched then update set column3 = t1.column3
  where column3 != t1.column3
;

如果您想使用 update 语句执行此操作,这可能会有所帮助:

Update with joins

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多