![]() |
|
Archives of the TeradataForumMessage Posted: Fri, 16 Sep 2005 @ 14:12:50 GMT
Al MacGowan wrote:
It's 3:50 PM here :-)
A Full Outer Join will do the trick - as long as all columns are NOT NULL, else it's more complicated:
drop table test_old;
drop table test_new;
create table test_old(
pk int not null primary key,
c1 char(5) not null,
c2 char(5) not null
);
create table test_new(
pk int not null primary key,
c1 char(5) not null,
c2 char(5) not null
);
insert into test_old(1, 'oldc1', 'oldc2');
insert into test_old(2, 'oldc1', 'oldc2');
insert into test_old(3, 'oldc1', 'oldc2');
insert into test_old(4, 'oldc1', 'oldc2');
insert into test_new(2, 'oldc1', 'oldc2');
insert into test_new(3, 'oldc1', 'newc2');
insert into test_new(4, 'newc1', 'oldc2');
insert into test_new(5, 'newc1', 'newc2');
select
/*** Status ***/
case
when o.pk is null then 'inserted'
when n.pk is null then 'deleted'
else 'updated'
end,
/*** "new" values ***/
coalesce(n.pk, o.pk),
coalesce(n.c1, o.c1),
coalesce(n.c2, o.c2),
/*** "new values", another option: show only modified columns ***/
case
when o.pk is null then n.c1
when n.pk is null then o.c1
when o.c1 <> n.c1 then n.c1
else NULL
end,
case
when o.pk is null then n.c2
when n.pk is null then o.c2
when o.c2 <> n.c2 then n.c2
else NULL
end
from test_old as o full outer join test_new as n
on o.pk = n.pk
where
o.pk is null
or
n.pk is null
or
o.c1 <> n.c1
or
o.c2 <> n.c2
order by coalesce(o.pk,n.pk)
;
NOT EXISTS is prefereable if there's any NULLable column...
If - there are NULLs - there may be duplicate rows - you don't need to know if a row was updated/inserted then use EXCEPT:
select * from test_old
except all
select * from test_new;
select * from test_new
except all
select * from test_old;
Dieter If you don't want to take care of NULLs then use EXCEPT
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Copyright 2016 - All Rights Reserved | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Last Modified: 15 Jun 2023 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||