Avatar billede funtex Nybegynder
22. august 2006 - 11:44 Der er 6 kommentarer og
1 løsning

Finde alle poster der ikke findes i to tabeller

Hej,

jeg har følgende select statements:

SELECT værdi FROM tabel1

og

SELECT værdi FROM tabel2

Jeg har brug for at finde alle de records der KUN findes i tabel1

Nogen forslag?

//Funtex
Avatar billede dr_chaos Nybegynder
22. august 2006 - 11:57 #1
SELECT værdi FROM tabel1
WHERE tabel1.Værdi NOT IN(SELECT værdi FROM tabel2)
Avatar billede funtex Nybegynder
22. august 2006 - 12:12 #2
tak det virker!
post et svar og få points.

Kan man lave statmentet så det tager den anden tabel også? (altså alle records der KUN findes i den ene tabel)

//Funtex
Avatar billede dr_chaos Nybegynder
22. august 2006 - 12:43 #3
svar :)
nu ved jeg ikke helt hvad du mener men du kan gøre det på flere måde:

SELECT værdi FROM tabel1
WHERE tabel1.Værdi NOT IN(SELECT værdi FROM tabel2) AND tabel1.Værdi NOT IN(SELECT værdi FROM tabel3)

SELECT værdi FROM tabel1
WHERE tabel1.Værdi NOT IN(SELECT værdi FROM tabel2 WHERE tabel2.Værdi NOT IN(SELECT værdi FROM tabel3))
Avatar billede dr_chaos Nybegynder
22. august 2006 - 12:43 #4
ups svar :)
Avatar billede funtex Nybegynder
22. august 2006 - 12:48 #5
jeps...Det var en udemærket løsning
Endnu engang tak

//Funtex
Avatar billede dr_chaos Nybegynder
22. august 2006 - 12:58 #6
np :)
Avatar billede kjulius Novice
22. august 2006 - 15:50 #7
Alternativt kan du også gøre det med en LEFT JOIN:

SELECT t1.*
FROM tabel1 t1
LEFT JOIN tabel2 t2 ON t1.felt = t2.felt
WHERE t2.felt IS NULL

Den vil kun returnere rækker fra tabel1 hvor der ikke findes en tilsvarende række i tabel2 (alle felter i tabel2 vil i så fald blive returneret som null og hvis du tester på det, vil du kunne udvælge rækker på den baggrund)

Omvendt vil du ved at bruge en INNER JOIN (uden test på NULL) kunne returnere de rækker som er repræsenterede i begge tabeller.

Du ville også kunne have brugt en alternativ løsning med en subquery:

SELECT *
FROM tabel1 t1
WHERE NOT EXISTS (
  SELECT * FROM tabel2 t2
  WHERE t1.felt = t2.felt)


Om disse løsninger er bedre end dr_chaos' løsning? Nej, ikke nødvendigvis. Det afhænger af datamængder, indexes osv.

Det er sjældent der kun er en måde at løse en given opgave på, og kun gennem test og "fingerspitzengefühl" kan man finde den optimale metode.
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