[FRAGE] - Könnt ihr mir helfen: Was ist da falsch??? (Bsp.20)
Results 1 to 9 of 9
  1. #1
    AntiBit's Avatar
    Title
    Baccalaureus
    Join Date
    Feb 2002
    Location
    Wien
    Posts
    738
    Thanks
    0
    Thanked 6 Times in 3 Posts

    Könnt ihr mir helfen: Was ist da falsch??? (Bsp.20)

    Hoi Leute, wär toll wenn ihr mir sagen könntet was da nicht stimmt, ich bekomm immer gar nichts raus bei der Query ...

    Bsp.20)

    select k.telefon, k.nachname, k.vorname from kunde k where k.knr = ausleihe.knr and
    ausleihe.invnr = exemplar.invnr and
    exemplar.isbn = autor.isbn and
    autor.vorname = 'karl' and
    autor.nachname = 'may'
    group by k.telefon, k.nachname, k.vorname
    having
    count(distinct exemplar.isbn) =
    ( select count (buch.isbn) from buch, autor where buch.isbn=autor.isbn and autor.vorname='karl' and autor.nachname='may');

    Bis zum subselect ist alles gleich wie bei der musterlösung, aber der subselect muss doch auch stimmen, ich verstehs nicht.
    Ich zähl im subselect einfach alle verschiedenen ISBN's die's gibt von dem Autor Karl May.

    Wo liegt der blöde Fehler???? Sehr dankbar für Tipp!
    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  2. #2
    MarvinTheRobot's Avatar
    Title
    Dipl.Ing
    Join Date
    Feb 2002
    Location
    48° 09′ N, 16° 27' E
    Posts
    1,753
    Thanks
    121
    Thanked 105 Times in 58 Posts
    Gehört da nicht noch ein Group by hin???? Wenn du Count verwendest musst du auch nach was Gruppieren oder?

    -> Count(buch.isbn)...... -> hinten group by (wasweissichirgendwas)

    vielleicht liegts daran aber ich test jetz mal das statement durch, mal sehen.
    Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders!
    www.chuckbronson.net
    www.spreadshirt.net/shop.php?sid=104618
    - TU-Funshirt-Shop
    Quote Originally Posted by peszi_forum
    Schiefe optik? siehe dazu den atttachment.. Und deine reaktion war wirklich robot mäßig bei antworten geben

  3. #3

    Title
    Baccalaureus
    Join Date
    Feb 2002
    Location
    Wien
    Posts
    534
    Thanks
    3
    Thanked 124 Times in 78 Posts
    Original geschrieben von MarvinTheRobot
    Gehört da nicht noch ein Group by hin???? Wenn du Count verwendest musst du auch nach was Gruppieren oder?

    -> Count(buch.isbn)...... -> hinten group by (wasweissichirgendwas)

    vielleicht liegts daran aber ich test jetz mal das statement durch, mal sehen.
    nein, man muss nicht unbedingt gruppieren, z.B.
    select count(*) from Buch;

  4. #4
    AntiBit's Avatar
    Title
    Baccalaureus
    Join Date
    Feb 2002
    Location
    Wien
    Posts
    738
    Thanks
    0
    Thanked 6 Times in 3 Posts
    Ja gruppieren muss man da nicht, ich weiß aber selber nicht warum, bin etwas verwirrt im Moment von zu viel SQL
    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  5. #5

    Title
    Elite
    Join Date
    Feb 2002
    Posts
    482
    Thanks
    0
    Thanked 0 Times in 0 Posts
    du musst die ISBNs im sub-query auch "distinct" counten, sonst kommt dir bei dem count viel mehr raus, als es eigentlich verschiedene Karl May Bücher gibt, weshalb der Vergleich immer false sein wird und du daher überhaupt keine Tupel ausgewählt bekommst... also

    having
    count(distinct exemplar.isbn) =
    ( select count (distinct buch.isbn) from buch, autor where buch.isbn=autor.isbn and autor.vorname='karl' and autor.nachname='may');

    Außerdem gehören in das "from" vom äußeren Query ALLE Tabellen, die du verwendest, also auch Ausleihe, Autor und Exemplar!

  6. #6
    AntiBit's Avatar
    Title
    Baccalaureus
    Join Date
    Feb 2002
    Location
    Wien
    Posts
    738
    Thanks
    0
    Thanked 6 Times in 3 Posts
    du musst die ISBNs im sub-query auch "distinct" counten
    Hmm ich hab gedacht ich brauch hier kein distinct, weil die ISBN's der Bücher ja primary keys sind und deswegen nur einmal vorkommen. Ich habs aber auch mal mit distinct versucht, mit demselben Ergebniss.



    Außerdem gehören in das "from" vom äußeren Query ALLE Tabellen, die du verwendest, also auch Ausleihe, Autor und Exemplar!
    Brauch ich die ALLE? Ich will die Ergebniss-Tupel doch nur von Kunde haben... Bei den anderen Bsp hab ich die anderen Relationen zumindest auch immer weglassen können. Ich dachte wiederum die werden nur angeschrieben, um Abkürzungen zu generieren (also das ich z.B. nicht immer exemplar.invnr sondern e.invnr schreiben kann)

    Leider kann ich ja nicht mit der Datenbank rumprobieren
    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  7. #7

    Title
    Elite
    Join Date
    Feb 2002
    Posts
    482
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Original geschrieben von AntiBit


    Brauch ich die ALLE?
    Also, laut SQL Standard musst du das schon, vielleicht ist PostgreSQL aber da nicht so streng.

    Mit den ISBNs vom Buch hast du allerdings recht, denke ich mal, also kanns daran nicht liegen, war mein Fehler!

    Was anderes: ist SQL bei den strings vielleicht case-senstive? Ich mein, beim Anfragecode nicht, aber vielleicht gilt bei den strings 'karl' != 'Karl', da bin ich mir aber nicht sicher.

    Außerdem tät ich dir vorschlagen, auf JEDENFALL bei einem Vergleich von zwei counts diesselben Attribute aus derselben Relation zu zählen, also nicht einmal ISBN vom Buch, einmal von Exemplar: was ist, wenn ein Karl May Buch in der Datenbank ist, von dem es kein Exemplar gibt -> das könnte auch keiner entlehnt haben! Nimm mal im inneren Query Exemplar statt Buch! Exemplar.ISBN musst du dann aber schon distinct counten!

  8. #8
    AntiBit's Avatar
    Title
    Baccalaureus
    Join Date
    Feb 2002
    Location
    Wien
    Posts
    738
    Thanks
    0
    Thanked 6 Times in 3 Posts
    Hmm ok danke ich werde deine Tipps beherzigen.

    Kanns eh nicht weiterüberprüfen / No Datenbank

    lg, AntiBit
    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  9. #9

    Title
    Baccalaureus
    Join Date
    Feb 2002
    Location
    Wien
    Posts
    534
    Thanks
    3
    Thanked 124 Times in 78 Posts
    falls es jemanden interessiert:
    hier die SQL-Abfragen, die ich abgegeben hab:
    http://stud3.tuwien.ac.at/~e9726400/SQL.txt
    Ich glaub, es stimmt alles.
    Bei manchen hab ich zwei Varianten.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •