7

我有一个如下所示的更新语句,它工作正常,我在子查询中使用了一个 with 语句来大大提高性能,但由于某种原因,我不允许从同一个表中添加一个额外的列来更新。

作品:

UPDATE Table_A SET (Col_One) = (WITH OneValue AS (SELECT DISTINCT t.Col_One
                                                  FROM Table_Two t, Table_A a
                                                  WHERE t.id = a.New_Id))
                                SELECT Col_One FROM OneValue);

我想做的只是包括另一列也像这样从 table_two 更新

UPDATE Table_A SET (Col_One, Col_Two) = (WITH OneValue AS (SELECT DISTINCT t.Col_One, T.Col_two
                                                  FROM Table_Two t, Table_A a
                                                  WHERE t.id = a.New_Id))
                                SELECT Col_One, Col_Two FROM OneValue);

但我得到 ora-01767 更新集表达式必须是子查询。我理解这个错误,但看不到我是如何生成它的。任何帮助是极大的赞赏。

提前致谢。

4

1 回答 1

9

这似乎可行(无论如何,它都是使用 DUAL 进行简单查询):

UPDATE Table_A SET (Col_One, Col_Two) = (select col_one, col_two from
                                          (WITH OneValue AS (SELECT DISTINCT t.Col_One, T.Col_two
                                                  FROM Table_Two t, Table_A a
                                                  WHERE t.id = a.New_Id))
                                           SELECT Col_One, Col_Two FROM OneValue)
                                        );

至于子查询以“WITH”开头为什么不起作用,我只能想象是因为Oracle SQL的设计者没有预料到这种用法。

于 2012-06-06T15:42:00.473 回答