langzen Skrevet 14. oktober 2011 Del Skrevet 14. oktober 2011 Hei. Sliter med å gjøre om en spørring med en all-kvantor til en SQL-spørring. Ser ikke helt logikken. Jeg ønsker egentlig å bruke DIVISION fra relasjonsalgebra, men ettersom ikke SQL har denne operasjonen vet jeg ikke helt hva jeg skal gjøre. Følgende utsagn skal jeg lage en spørring av: "Finn forlag som har gitt ut bøker om alle fagfelt." Databasen ser slik ut: Forlag(navn*, epost, url) Bok(isbn*, tittel, utgiver(fk fra Forlag)) Fagfelt(bok*(fk fra bok), felt*) Problemet er at jeg ikke forstår logikken helt, ved å gjøre om "alle" til subspørringer av NOT EXISTS, EXISTS, osv. Dette er et forsøk: "SELECT navn FROM forlag WHERE NOT EXISTS ( SELECT * FROM fagfelt WHERE NOT EXISTS ( SELECT isbn FROM bok, fagfelt, forlag WHERE bok.isbn = fagfelt.bok AND bok.utgiver = forlag.navn));" Takker for hjelp hilsen en frustrert IT-student. Lenke til kommentar
Demantios Skrevet 14. oktober 2011 Del Skrevet 14. oktober 2011 Hva slags data er det i bok.felt? Kan hva som helst ligge der eller er det litt random hva som står? Skal man finne forlag som har bøker i alle brukte felt? Lenke til kommentar
torbjørn marø Skrevet 14. oktober 2011 Del Skrevet 14. oktober 2011 (endret) Hva med noe sånt? SELECT f.navn FROM Forlag f WHERE (SELECT Count(DISTINCT ff.felt) FROM Fagfelt ff, Bok bo, Forlag fo WHERE ff.bok = bo.isbn AND bo.utgiver = fo.navn AND fo.navn = f.navn) = (SELECT Count(DISTINCT fff.felt) FROM Fagfelt fff) Fullstendig brainstorming, men funker kanskje. Mener logikken er ok Update: Den første subselecten gir altså antall fagfelt for et gitt forlag, mens den andre gir totalt antall fagfelt. Hvis disse er like skal forlaget inkluderes. Endret 14. oktober 2011 av torbjørn marø Lenke til kommentar
langzen Skrevet 17. oktober 2011 Forfatter Del Skrevet 17. oktober 2011 Hey, takk for tilbakemeldinger. Har vært på hytte uten internett i helgen, så har ikke hatt muligheten til å se på det før nå. @torbjørn marø, fin fremgangs måte og den fungerte strålende, ser logikken bak den og:) Eneste problemet for en som er ny med SQL er å tenke seg til slike løsninger selv;) 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å