我有一个合并查询,如下所示:
.right_col {
min-height: 647px;
display: flex;
}
.fill {
flex: 1;
background: gray;/* see me */
box-sizing: border-box;
}
现在它给我一个错误:无法在源表中获得一组稳定的行
现在问题是源表table2具有相同column1值的多个记录,而table1每个column1值只有一个记录。我需要所有table2来更新table1。你能帮忙吗?
答案 0 :(得分:2)
"问题是源tabletable2,具有相同column1值的多个记录"
您需要确保您的子查询每个column1
值只返回一行。只有您知道需要应用的确切业务规则,但它可能是这样的:
merge into table1
using ( select column1, max(column2) as column2
from table2
group by column1 ) t2
on (table1.column1 = t2.column1)
when matched then
update
set column2 = t2.column2;
"我需要table2中的所有记录来更新table1。原因是我在table1上有一个触发器,它捕获所有事务(插入/更新)并加载到另一个历史表。 "
您无法使用MERGE。事实上,你可能不得不采取程序性行动:
begin
for t2rec in (select column1, column2
from table2
order by column1, column2 )
loop
update table1
set column2 = t2rec.column2
where column1 = t2rec.column1;
end loop;
end;
您需要订购循环语句,以确保table1
的结束状态正确。
或者,您可以禁用日记触发器并执行此操作:
insert into table1_journal
select table1.column1
, table2.column2
from table1
join table2
on table1.column1 = table2.column1
/
然后执行MERGE或单行更新。