drop table emps purge
ORA-00942: table or view does not existMore Details: https://docs.oracle.com/error-help/db/ora-00942
drop table corrects purge
ORA-00942: table or view does not existMore Details: https://docs.oracle.com/error-help/db/ora-00942
create table emps (
id number primary key,
fname varchar2(15),
lname varchar2(15)
)
Table created.
insert into emps values (1, 'quanwen', 'Zheng')
1 row(s) inserted.
insert into emps values (2, 'nin', 'jin')
1 row(s) inserted.
commit
1 row(s) inserted.
select * from emps
ID | FNAME | LNAME | 1 | quanwen | Zheng | 2 | nin | jin |
---|
create table corrects (
emp_id number,
fname varchar2(15),
lname varchar2(15),
reviewed date
)
1 row(s) inserted.
insert into corrects values (1, 'Quanwen', 'Zhao', sysdate)
Table created.
insert into corrects values (2, 'Ning', 'Jin', sysdate)
Statement processed.
commit
select * from corrects
EMP_ID | FNAME | LNAME | REVIEWED | 1 | Quanwen | Zhao | 28-MAY-25 | 2 | Ning | Jin | 28-MAY-25 |
---|
merge into emps target
using (select emp_id, fname, lname
from corrects
) source
on (target.id = source.emp_id)
when matched then
update set
target.fname = source.fname,
target.lname = source.lname
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | Quanwen | Zhao | 2 | Ning | Jin |
---|
rollback
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | Quanwen | Zhao | 2 | Ning | Jin |
---|
update emps set fname='quanwen', lname='Zheng' where id = 1
1 row(s) updated.
update emps set fname='nin', lname='jin' where id = 2
1 row(s) updated.
commit
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | quanwen | Zheng | 2 | nin | jin |
---|
insert into corrects values (1, 'Quanwen', 'Zhao', sysdate-1)
1 row(s) inserted.
insert into corrects values (1, 'Quanwen', 'Zhao', sysdate-2)
1 row(s) inserted.
insert into corrects values (1, 'Quanwen', 'Zhao', sysdate-3)
1 row(s) inserted.
insert into corrects values (1, 'Quanwen', 'Zhao', sysdate-4)
1 row(s) inserted.
insert into corrects values (1, 'Quanwen', 'Zhao', sysdate-5)
1 row(s) inserted.
insert into corrects values (2, 'Ning', 'Jin', sysdate-1)
1 row(s) inserted.
insert into corrects values (2, 'Ning', 'Jin', sysdate-2)
1 row(s) inserted.
insert into corrects values (2, 'Ning', 'Jin', sysdate-3)
1 row(s) inserted.
insert into corrects values (2, 'Ning', 'Jin', sysdate-4)
1 row(s) inserted.
insert into corrects values (2, 'Ning', 'Jin', sysdate-5)
1 row(s) inserted.
commit
Statement processed.
select * from corrects order by 1, 4 desc
EMP_ID | FNAME | LNAME | REVIEWED | 1 | Quanwen | Zhao | 28-MAY-25 | 1 | Quanwen | Zhao | 27-MAY-25 | 1 | Quanwen | Zhao | 26-MAY-25 | 1 | Quanwen | Zhao | 25-MAY-25 | 1 | Quanwen | Zhao | 24-MAY-25 | 1 | Quanwen | Zhao | 23-MAY-25 | 2 | Ning | Jin | 28-MAY-25 | 2 | Ning | Jin | 27-MAY-25 | 2 | Ning | Jin | 26-MAY-25 | 2 | Ning | Jin | 25-MAY-25 | 2 | Ning | Jin | 24-MAY-25 | 2 | Ning | Jin | 23-MAY-25 |
---|
merge into emps target
using (select emp_id, fname, lname
from corrects
) source
on (target.id = source.emp_id)
when matched then
update set
target.fname = source.fname,
target.lname = source.lname
ORA-30926: unable to get a stable set of rows in the source tables ORA-06512: at "SYS.DBMS_SQL", line 1721More Details: https://docs.oracle.com/error-help/db/ora-30926
select * from emps
ID | FNAME | LNAME | 1 | quanwen | Zheng | 2 | nin | jin |
---|
Rewriting method 1:
select distinct emp_id, fname, lname from corrects order by 1
EMP_ID | FNAME | LNAME | 1 | Quanwen | Zhao | 2 | Ning | Jin |
---|
Rewriting method 1:
merge into emps target
using (select distinct emp_id, fname, lname from corrects order by 1) source
on (target.id = source.emp_id)
when matched then
update set
target.fname = source.fname,
target.lname = source.lname
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | Quanwen | Zhao | 2 | Ning | Jin |
---|
update emps set fname='quanwen', lname='Zheng' where id = 1
1 row(s) updated.
update emps set fname='nin', lname='jin' where id = 2
1 row(s) updated.
commit
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | quanwen | Zheng | 2 | nin | jin |
---|
Rewriting method 2:
select emp_id, max(fname) fname, max(lname) lname from corrects
group by emp_id
order by 1
EMP_ID | FNAME | LNAME | 1 | Quanwen | Zhao | 2 | Ning | Jin |
---|
Rewriting method 2:
merge into emps target
using (select emp_id, max(fname) fname, max(lname) lname from corrects
group by emp_id
order by 1
) source
on (target.id = source.emp_id)
when matched then
update set
target.fname = source.fname,
target.lname = source.lname
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | Quanwen | Zhao | 2 | Ning | Jin |
---|
update emps set fname='quanwen', lname='Zheng' where id = 1
1 row(s) updated.
update emps set fname='nin', lname='jin' where id = 2
1 row(s) updated.
commit
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | quanwen | Zheng | 2 | nin | jin |
---|
Rewriting method 3:
select * from (
select emp_id, fname, lname, row_number() over(partition by emp_id order by emp_id) rn from corrects
)where rn=1
EMP_ID | FNAME | LNAME | RN | 1 | Quanwen | Zhao | 1 | 2 | Ning | Jin | 1 |
---|
Rewriting method 3:
merge into emps target
using
( select * from
( select emp_id, fname, lname, row_number() over(partition by emp_id order by emp_id) rn from corrects
)where rn=1
) source
on (target.id = source.emp_id)
when matched then
update set
target.fname = source.fname,
target.lname = source.lname
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | Quanwen | Zhao | 2 | Ning | Jin |
---|
update emps set fname='quanwen', lname='Zheng' where id = 1
1 row(s) updated.
update emps set fname='nin', lname='jin' where id = 2
1 row(s) updated.
commit
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | quanwen | Zheng | 2 | nin | jin |
---|
Rewriting method 4:
select emp_id, fname, lname from corrects where rowid in (select max(rowid) from corrects group by emp_id) order by emp_id
EMP_ID | FNAME | LNAME | 1 | Quanwen | Zhao | 2 | Ning | Jin |
---|
Rewriting method 4:
merge into emps target
using
( select emp_id, fname, lname
from corrects
where rowid in (select max(rowid) from corrects group by emp_id)
order by emp_id
) source
on (target.id = source.emp_id)
when matched then
update set
target.fname = source.fname,
target.lname = source.lname
Statement processed.
select * from emps
ID | FNAME | LNAME | 1 | Quanwen | Zhao | 2 | Ning | Jin |
---|