修复 oracle 更新语句的任何建议
Any suggestion to fix oracle update statement
我正在尝试使用查询
的数据结果更新table1.column_name1
Select ID, column_name1
from table2
union
Select ID, column_name2
from table3
但我得到这个错误:
ORA-01427: single-row subquery returns more than one row
有什么建议吗,谢谢:)
有以下数据表:
表 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);
您可以使用带有 JOIN
而不是 UNION
的查询,例如为了能够处理空值,这些空值会导致 UPDATE
语句中出现太多行,其中WHERE
还需要条件
UPDATE table1 t1
SET t1.column_name1 = ( SELECT NVL(t3.column_name2, t2.column_name1)
FROM table2 t2
JOIN table3 t3
ON t3.ID = t2.ID
WHERE t3.ID = t1.ID )
WHERE EXISTS
( SELECT *
FROM table2 t2
JOIN table3 t3
ON t3.ID = t2.ID
WHERE t3.ID = t1.ID )
您遇到问题是因为您试图将两个值 (same/different) 分配给单个值。
您可以按如下方式使用merge
:
Merge into table1 t1
Using (SELECT coalesce(t2.column_name1, t3.column_name2) as column_name, t2.id
FROM table2 t2
JOIN table3 t3 ON t3.ID = t2.ID) src
ON (src.ID = t1.ID)
When matched then
Update set t1.column_name1 = src.column_name
我正在尝试使用查询
的数据结果更新table1.column_name1
Select ID, column_name1
from table2
union
Select ID, column_name2
from table3
但我得到这个错误:
ORA-01427: single-row subquery returns more than one row
有什么建议吗,谢谢:)
有以下数据表:
表 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);
您可以使用带有 JOIN
而不是 UNION
的查询,例如为了能够处理空值,这些空值会导致 UPDATE
语句中出现太多行,其中WHERE
还需要条件
UPDATE table1 t1
SET t1.column_name1 = ( SELECT NVL(t3.column_name2, t2.column_name1)
FROM table2 t2
JOIN table3 t3
ON t3.ID = t2.ID
WHERE t3.ID = t1.ID )
WHERE EXISTS
( SELECT *
FROM table2 t2
JOIN table3 t3
ON t3.ID = t2.ID
WHERE t3.ID = t1.ID )
您遇到问题是因为您试图将两个值 (same/different) 分配给单个值。
您可以按如下方式使用merge
:
Merge into table1 t1
Using (SELECT coalesce(t2.column_name1, t3.column_name2) as column_name, t2.id
FROM table2 t2
JOIN table3 t3 ON t3.ID = t2.ID) src
ON (src.ID = t1.ID)
When matched then
Update set t1.column_name1 = src.column_name