【发布时间】:2021-03-09 14:27:43
【问题描述】:
我正在尝试使用查询的数据结果更新table1.column_name1
Select ID, column_name1
from table2
union
Select ID, column_name2
from table3
但我收到此错误:
ORA-01427: 单行子查询返回多于一行
请给点建议,谢谢:)
有以下数据表:
表1
ID column_name1
----------------------------
26 null
30 null
34 null
表2
ID column_name1
---------------------------
26 fix
30 var
34 fix
表3
ID column_name2
----------------------------
26 fix
30 null
34 fix
想要的结果:
ID column_name1
-----------------------------
26 fix
30 var
34 fix
查询:
UPDATE table1
SET table1.column_name1 = (SELECT b.column_name1
FROM table1 f
JOIN
(SELECT ID, column_name1
FROM table2
UNION
SELECT ID, column_name2
FROM table3) b ON f.ID = b.ID);
【问题讨论】:
-
请提供示例数据、期望的结果以及您想要实现的逻辑的解释。
-
您没有准确解释“期望”值是如何从“输入”派生的,但我们可以从您的示例中猜到。但是:两个表中的值是否有可能不是
null,并且它们不相等?如果那永远不可能(尽管你怎么知道?)那就这么说吧。如果有可能,那么结果应该是什么?在这种内部矛盾的情况下,查找表中的一个是否优先于另一个?然后,还有:如果您的基表中已经有一个非null值怎么办?即使在这种情况下你也想更新它吗?
标签: sql oracle sql-update inner-join update-statement