我有两个表,除了名称外,它们基本上是相同的:一个用于实际数据,第二个用于备份。我想要做的是使用另一个中的内容来更新第一个中的字段-根据ID逐字段检查。
让我们说它应该像这样:
我应该使用哪些查询?在ORACLE / SQL中的表中如何迭代?
答案 0 :(得分:2)
您可以尝试使用MERGE语句。
测试数据:
SQL> create table FIRST_TABLE (
2 ID_FT number(20),
3 NAME_FT varchar2(200));
4 create table SECOND_TABLE (
5 ID_ST number(20),
6 NAME_ST varchar2(200));
7 insert into FIRST_TABLE (ID_FT,NAME_FT) values (1,null);
8 insert into FIRST_TABLE (ID_FT,NAME_FT) values (2,null);
9 insert into SECOND_TABLE (ID_ST,NAME_ST) values (1,'ST1');
10 insert into SECOND_TABLE (ID_ST,NAME_ST) values (2,'ST2');
11 insert into SECOND_TABLE (ID_ST,NAME_ST) values (3,'ST3');
12 commit;
查询:
SQL> merge into first_table t1
2 using second_table t2
3 on (t1.id_ft = t2.id_st)
4 when matched then update set t1.name_ft = t2. name_st;
5 commit;
6 select * from first_table;
ID_FT NAME_FT
---------- ----------
1 ST1
2 ST2
此外,如果要使用MERGE
,则可以在数据丢失的情况下在first_table中插入数据。
SQL> merge into first_table t1
2 using second_table t2
3 on (t1.id_ft = t2.id_st)
4 when matched then update set t1.name_ft = t2. name_st
5 when not matched then insert (t1.id_ft,t1.name_ft) values (t2.id_st,t2.name_st);
6 commit;
7 select * from first_table;
ID_FT NAME_FT
---------- ----------
1 ST1
2 ST2
3 ST3
答案 1 :(得分:0)
我认为您只想使用相关子查询进行更新:
update first_table ft
set name_ft = (select t2.name_st from second_table st where ft.ID_FT = st.ID_ST)
where exists (select t2.name_st from second_table st where ft.ID_FT = st.ID_ST);