ummairt Skrevet 1. desember 2007 Del Skrevet 1. desember 2007 Hei, Jeg har litt problemer med å forstå en spørring hvor "not exists" blir brukt. Har 3 tabeller Ansatt(anr (anr, navn, lønn, avd) Avdeling(avdnr, a-navn, leder) Prosjektplan(pnr, anr, timer) spørsmålet er; Finn navn på ansatte som skal delta på alle prosjekter SELECT A.navn FROM Ansatt A WHERE NOT EXISTS ( SELECT pnr FROM Prosjektplan P1 WHERE NOT EXITS ( SELECT * FROM Prosjektplan P2 WHERE P2.pnr = P1.pnr AND P2.anr = A.anr) ) Jeg forstår dette slik: først så får man ut alle ansatte, så tar man NOT EXISTS prosjektnummer ( får ut alle prosjektnummer ) også sammenlikner man alle prosjekter hvor to prosjektnummere er like :S og prosjektnummeret på det ene er lik ansatt nr på den andre. Men ved å bruke NOT EXISTS .. utelar vi ikke disse resultatene. Spørsmålet mitt er her, hva er det som blir eliminert i denne spørringen ... takker . Lenke til kommentar
blackbrrd Skrevet 1. desember 2007 Del Skrevet 1. desember 2007 Du kan begynne med å endre not exits spørringene til å ikke hente noe tabelldata, ettersom exists er sann hvis det blir returnert en rad, den bryr seg ikke om hva som blir returnert, og det er bare forvirrende. SELECT A.navn FROM Ansatt A WHERE NOT EXISTS ( SELECT 1 FROM Prosjektplan P1 WHERE NOT EXITS ( SELECT 1 FROM Prosjektplan P2 WHERE P2.pnr = P1.pnr AND P2.anr = A.anr) ) Spørringe blir da: Hent ut ansatte som ikke har prosjektplan som ikke har prosjektplan knyttet til ansatt Ville kanskje løst det slik selv: SELECT A1.* FROM Ansatt A1 WHERE NOT EXISTS (SELECT 1 FROM Prosjektplan P LEFT JOIN Ansatt A2 ON P.anr = A2.anr AND A2.anr = A1.anr WHERE A2.anr IS NULL) Hent ut ansatte hvor det ikke finnes en prosjektplan som ikke er koblet mot ansatt 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å