Bierspecke: MYSQL

Hey forum=)

also foldendes problem:
bin in sachen mysql n echter neuling, wurschtel hier nun schon stundenlang an ein paar aufgaben rum. komme langsam voran, aber hier haperts nun:

aufgabe: is das buch mit den meisten stichwörtern ausgeliehen: ja/nein ?

tabellen:
gehoert_zu mit stichwortnr und buchnr
buch mit buchnr und ausleihernr
weitere tabellen auf anfrage!

code:

SELECT "Ja" AS  Antwort FROM Buch
WHERE ((SELECT BuchNr, COUNT(StichwortNR) FROM gehoert_zu  GROUP BY BuchNr ORDER BY
COUNT(StichwortNR) DESC limit 1) = (SELECT BuchNr FROM Buch WHERE AusleiherNR != 0))

UNION SELECT "Nein" AS  Antwort FROM Buch
WHERE ((SELECT BuchNr, COUNT(StichwortNR) FROM gehoert_zu  GROUP BY BuchNr ORDER BY
 COUNT(StichwortNR) DESC limit 1) =(SELECT BuchNr FROM Buch WHERE AusleiherNR = 0))

zerfleischt mich ruhig =) zumindest hoffe ich es, es wirkt alles etwas unübersichtlich:D

mfg, bs;)

  1. Hallo

    aufgabe: is das buch mit den meisten stichwörtern ausgeliehen: ja/nein ?

    tabellen:
    gehoert_zu mit stichwortnr und buchnr
    buch mit buchnr und ausleihernr
    weitere tabellen auf anfrage!

    Du benötigst eine korrelierte Unterabfrage, die Aggregatsfunktion MAX() und vernünftigerweise den Vergleichsoperator IS NULL. Sollte tatsächlich der Integerwert 0 verwendet werden, um anzuzeigen, dass das Buch keinen Ausleiher hat, dann ein Vergleich mit den üblichen Vergleichsoperatoren. LIMIT kommt in meinen Überlegungen überhaupt nicht vor).
    Wenn wirklich "Ja", "Nein" ausgegeben werden soll, käme entweder das if()-Konstrukt oder der case-Operator in Frage.

    Viel mehr kann man ohne Beispieldatensätze und genauere Definition der Spalten nicht sagen.

    Freundliche Grüße

    Vinzenz

    1. Wir haben Beispielabfragen in denen es mit union gemacht wurde, von daher hab ich das so übernommen, zumindest versucht zu übernehmen. Und ja, es soll da nur ein ja oder nein bei herauskommen!
      Die Sache mit dem if und case ist mir neu =/

      Wenn ich den Code so lasse, sagt mir das programm:

      Operand should contain 2 column(s)

      was genau bedeutet das?

      und die Tabellen:

      Buch:
      BuchNr   Titel         Jahr   Preis   VerlagNr   AusleiherNr
      200  Programmieren in C    1998  9.99  3505     900101
      201  Word 2000        1999  9.99  3505     0
      202  St?rmische Ernte      1930  9.00  0     900105
      203  Die Dreigroschen Oper 1922  9.99  3502     0
      204  Die Weber        1922  9.99  3501     900105
      205  Der Herr der Ringe    1942  9.99  3502     0
      206  PC Intern        2001  9.99  3505     900110
      207  Die Office 2000 Bibel 2002  9.99  3508     0
      208  Linux                1970  9.99  3505     0
      209  Suse Linux 9.0        2005  9.99  0          0
      210  Der Gandolfo-Anschlag 1972  9.90  3502     900105
      211  Andromeda        1988  9.99  3501     0
      212  Der Binnenmarkt       1965  9.99  0     0
      213  Mein Leben        1962  9.99  0     0
      214  Fruechte des Zorns    1934  9.99  3501     0
      215  Die Caine war ihr...  1955  9.99  0     900110
      216  Micky Mouse        1970  5.90  0     900106
      217  Donald Duck        1971  5.90  0     0
      218  Toepfern ohne Ton     2003  9.99  0     0
      219  Power Point 97        1998  9.99  3508     900114
      220  Farm der Tiere        1953  9.99  0     900114

      und stichworte:

      StichwortNr   BuchNr
      3500          200
      3500          206
      3550          200
      3550          206
      3551          200
      3552          200
      3552          206
      3552          208
      3553          203
      3553          210
      3553          211
      3554          204
      3555          218
      3562          202
      3562          205
      3562          210
      3562          211
      3562          214
      3562          215
      3564          202

      1. Hallo

        Wir haben Beispielabfragen in denen es mit union gemacht wurde, von daher hab ich das so übernommen, zumindest versucht zu übernehmen. Und ja, es soll da nur ein ja oder nein bei herauskommen!

        ja klar, statt if kann man natürlich ein UNION-Konstrukt bauen, das einmal eben einen Datensatz zurückliefert, wenn das Buch (die Bücher) ausgeliehen ist bzw. einen, wenn das Buch nicht ausgeliehen ist. Sonderlich sinnvoll finde ich das nicht :-)

        Dein Statement ist übrigens abenteuerlich und viel zu kompliziert :-)

        Buch:
        BuchNr   Titel         Jahr   Preis   VerlagNr   AusleiherNr
        200  Programmieren in C    1998  9.99  3505     900101
        201  Word 2000        1999  9.99  3505     0

        tatsächlich mit 0 statt mit NULL. Verbesserungswürdiges Tabellendesign.

        Freundliche Grüße

        Vinzenz

        1. naja, wie gesagt, bin absolut neu auf dem gebiet:D ich wurschtel mir da irgendwas zusammen!

          das mit der tabelle, naja, inna vorschau hab ich alles noch grade gerückt und dann nachm abschicken war alles durcheinander!

          könntest du mir evtl. mal son  code mit dem if basteln, wie so etwas aussieht?