我有一个如下所示的更新语句,工作正常,我在子查询中使用了 with 语句来极大地提高性能,但由于某种原因,我不允许从同一个表添加额外的列来更新。
Works:
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 更新集表达式必须是子查询。我理解这个错误,但不明白我是如何生成它的。任何帮助是极大的赞赏。
提前致谢。
这似乎有效(无论如何,它都使用 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的设计者没有预料到这种用法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)