optiplex Skrevet 19. april 2007 Del Skrevet 19. april 2007 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
Manfred Skrevet 19. april 2007 Del Skrevet 19. april 2007 Og hva i all verden joiner du på, når du ikke har personid i telefonnummer-tabellen? Lenke til kommentar
optiplex Skrevet 19. april 2007 Forfatter Del Skrevet 19. april 2007 Glemte å skrive på at person_id var i tabellen Telefonnummer, så det stemmer ja! Lenke til kommentar
blackbrrd Skrevet 19. april 2007 Del Skrevet 19. april 2007 (endret) 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 19. april 2007 av blackbrrd Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå