Gå til innhold

All-kvantor spørring, PL/SQL


Anbefalte innlegg

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
Videoannonse
Annonse

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 av torbjørn marø
Lenke til kommentar

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

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...