【问题标题】:Trying to convert UPDATE into MERGE试图将 UPDATE 转换为 MERGE
【发布时间】:2014-10-18 05:34:30
【问题描述】:

我的问题很简单。我正在尝试将 UPDATE 语句转换为 MERGE 语句以获得更好的性能,因为更新计数可能在 10K - 1M 之间。这是我的更新代码:

UPDATE table_1 t1
   SET t1.col_1 =
          (SELECT t2.name
             FROM table_2 t2
            WHERE t2.fn = t1.col_1),
       t1.Col_3 =
          (SELECT t2.name
             FROM table_2 t2
            WHERE t2.fn = t1.Col_3),
       t1.Col_5 =
          (SELECT t2.name
             FROM table_2 t2
            WHERE t2.fn = t1.Col_5);

我尝试改成MERGE:

MERGE INTO Table_1
     USING (SELECT NAME FROM table_2) A
        ON (1 = 1)
WHEN MATCHED
THEN
   UPDATE SET Table_1.col_1 = A.NAME,
              Table_1.col_3 = A.NAME,
              Table_1.col_5 = A.NAME;

以上代码报错,请帮我解决问题。提前致谢。

【问题讨论】:

  • 添加错误信息。
  • 您使用的是哪个 DBMS?甲骨文? SQL Server?
  • @Jens 错误:无法获得要更新的稳定计数
  • @a_horse_with_no_name 我正在使用 Oracle 10G

标签: sql oracle merge sql-update


【解决方案1】:

使用

WHEN NOT MATCHED THEN
    INSERT (table_1.col1)
    VALUES (a.name);

【讨论】:

  • 缺少when not matched 不会导致“无法获得稳定的记录集”错误(它会在解析时导致语法错误)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2017-03-28
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多