Avatar billede rastamand Nybegynder
31. marts 2005 - 19:46 Der er 7 kommentarer og
1 løsning

sammenlign 2 tabeller og returner records der er forskellige

Jeg har en lidt tricky opgave som jeg er lidt usikker på hvordan løses. Jeg har 2 tabeller med samme data, forklaringen på hvorfor dette setup er lidt besværlig, men det er underordnet. De 2 tabeller har hver især en delt primær nøgle, hvor data jo er identisk de 2 imellem.

Jeg skal nu tjekke om data i de 2 tabeller er ens, altså sammenligne de 2 og derefter udskrive evt rækker som ikke findes i den ene eller anden tabel.. forstod i den? Det kan vel laves via noget sql tænker jeg, men det er lidt omvendt det der med at skrive rækker som ikke findes i den anden tabel.. måske skal man gøre det over 2 queries?

Her lidt input som dog er forkert. Når man i sql siger Not equal (<> eller !=) så returnere man alle rækker på nær den ene som er lig. Jeg vil kun udskrive en record, hvis den ikke findes i den anden tabel..

--------------------------------------
select distinct * from tabel1 t1, tabel2 t2 where ((t1.nr1<>t2.nr1)and(t1.nr2<>t2.nr2));
Avatar billede arne_v Ekspert
31. marts 2005 - 20:04 #1
Prøv:

SELECT *
FROM tabel1
WHERE NOT EXISTS (SELECT * FROM tabel2 WHERE t1.nr1=t2.nr1 AND t1.nr2=t2.nr2);
Avatar billede arne_v Ekspert
31. marts 2005 - 20:04 #2
og omvendt
Avatar billede lap Nybegynder
31. marts 2005 - 20:28 #3
Som outher join som performancemæssigt er bedre - især ved rigtig mange rækker:

select t1.*
from tabel1 t1, tabel2 t2
where t1.nr1 = t2.nr1(+)
and t1.nr2 = t2.nr2(+)
UNION
select t2.*
from tabel1 t1, tabel2 t2
where t1.nr1(+) = t2.nr1
and t1.nr2(+) = t2.nr2;
Avatar billede holdam Nybegynder
31. marts 2005 - 22:08 #4
Hvad med

SELECT * FROM tabel1 MINUS SELECT * FROM tabel2;

- og omvendt.

Eller er det for nemt?
Avatar billede dbangx Nybegynder
01. april 2005 - 12:37 #5
hvad med denne

select col1,col2,col3 from t1 where
col1 not in( select col1 from t2) AND
col2 not in( select col2 from t2) AND
col3 not in( select col3 from t2)

du skal selvfølgelig lige tilpasse col 1, 2 og 3 osv.

Ved ikke om det vil virke
Avatar billede charlie37 Nybegynder
13. maj 2005 - 10:15 #6
(select * from tabel1
minus
select * from tabel2)
union
(select * from tabel2
minus
select * from tabel1)

Denne giver alle der kun findes i den ene tabel men siger ikke noget om hvor de kommer fra
hvis du vil vide det skal du bare skrive :

(select *, 'T1' from tabel1
minus
select *, 'T1' from tabel2)
union
(select *, 'T2' from tabel2
minus
select *, 'T2' from tabel1)
Avatar billede qualjyn Nybegynder
12. juli 2005 - 10:23 #7
Jeg tror rfkint har givet det bedste svar - skal blot konverteres til et svar - så vi kan få den her lukket
Avatar billede charlie37 Nybegynder
03. november 2005 - 13:49 #8
JAmen så kommer svaret endelig :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester