Gå til innhold

Anbefalte innlegg

Jeg har et program som har en database med to tabeller som jeg ønsker å hente ut informasjon fra :

 

Tabell : Person

person_id

navn

 

Tabell : Telefonnummer

Telefonnummer_id

Telefonnummer

Telefonnummertype -> Hvor 1 er mobiltelefon,2 er fasttelefon, 3 er direktetelefon

 

En person kan ha 0 til mange telefonnummere, men kun 1 av hver Telefonnummertype(1,2,3)

 

Jeg ønsker å hente ut :

Personens navn + Telefonnummer hvor telefonnummertype er 1(mobiltelefon) alt. blankt telefonnummerfelt(NULL) hvis Telefonnummer(mobilnummer) ikke er registrert.

 

HAr prøvd å koble tabellene med Left outer Join for å få med telefonnummer som ikke er registrert, men med en gang jeg setter where Telefonnummertype = 1 i tillegg kommer det ingenting frem. Noen forslag ?

Lenke til kommentar
Videoannonse
Annonse

Under er det to eksempler på hvordan du kan skrive spørringen.

Eksempel 1:

SELECT *

FROM Person

LEFT JOIN Telefonnummer ON Person.person_id = Telefonnummer.person_id AND Telefonnummer.Telefonnummertype = 1

 

Eksempel 2:

SELECT *

FROM Person

LEFT JOIN Telefonnummer ON Person.person_id = Telefonnummer.person_id

WHERE (Telefonnummer.Telefonnummertype = 1 OR Telefonnummer.Telefonnummertype IS NULL)

 

Eksempel 3: Det du har gjort er, som ikke fungerer:

SELECT *

FROM Person

LEFT JOIN Telefonnummer ON Person.person_id = Telefonnummer.person_id

WHERE Telefonnummer.Telefonnummertype = 1

 

Som effektivt sett er det samme som

SELECT *

FROM Person

LEFT JOIN Telefonnummer ON Person.person_id = Telefonnummer.person_id

WHERE Telefonnummer.Telefonnummertype = 1 AND Telefonnummer.Telefonnummertype IS NOT NULL

 

Hvorfor er det slik

... er da det neste spørsmålet, og det er egentlig ganske enkelt. Hvis du sammenligner noe med null så får du false samme hva. Den eneste måten du kan sammenligne null med noe er IS NULL or IS NOT NULL.

 

Eksempel 3 fungerer mao ikke fordi Telefonnummer.Telefonnummertype er NULL hvis du ikke har noen rad i Telefonnummer for den person_id'n. Mao, du sammenligner NULL med 1 og det er false så da blir raden eksludert fra resultatet

Endret av blackbrrd
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...