Announcement

Collapse
No announcement yet.

3 Tabellen, SQL Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 3 Tabellen, SQL Abfrage

    Hi,

    ich muss als Studienarbeit eine Kochrezept Datenbank erstellen. Meine Aufgabe hierbei ist es u.a. anzeigen zu lassen welche Rezepte man mit den momentan vorhandenen Vorräten kochen kann.

    Allerdings stellt mich diese Abfrage vor ziemliche Probleme, da auch mein SQL sehr eingerostet ist, ich denke aber ihr könnt mir hier weiterhelfen.

    Meine Access Datenbank sieht jedenfalls folgendermaßen aus:

    -> Siehe bitte Anhang


    Also, ein Rezept kann logischerweise mehrere Zutaten haben. Jede Zutat kann im Vorrat vorhanden sein, muss aber nicht.


    Der SQL Befehl mit dem ich es bisher versuchte funktioniert leider nicht, er zeigt mir nämlich auch Rezepte an bei denen eine Zutat vorhanden ist, eine andere allerdings nicht:

    SELECT DISTINCT
    r.RezeptName FROM tblRezepte r, tblZutaten z
    WHERE r.RezeptName = z.RezeptName
    AND z.Name IN (select z.name FROM tblZutaten z, tblVorrat v
    WHERE v.name = z.name and v.menge >= z.menge)


    Ich hoffe ihr versteht mein Problem und könnt mir helfen. Vielen Dank schonmal für eure Bemühungen!
    Attached Files

  • #2
    Hallo,

    Lehrer & Co sind leicht phantasielos und deshalb ist die "Rezept_DB" die Standard-Aufgabe.
    Ergo gibt es unzählige Postings dazu, such doch einfach mal,
    z.B. "Rezepte die nur bestimmte Zutaten enthalten?" =>
    http://entwickler-forum.de/showthread.php?t=52018

    Das müsste schon weiter helfen.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hi,

      schonmal danke, aber hilft mir ehrlichgesagt nicht weiter, da meine Datenbank ja anders aufgebaut ist (und ich diese auch nicht mehr ändern werde).

      Mich würde eher interessieren wo der Denkfehler bei meinem Versuch ist.

      Comment


      • #4
        Das Model in dem anderen Thread ist anders (besser...), die Problemmatik aber völlig die gleiche.
        Du musst Dir nur die Zwischentabelle "Rezept_zu_Zutat" wegdenken, von daher ist es bei Deinem Model sogar einfacher (nicht besser).

        Und der Gedankenfehler ist, das Du zunächst im SubQuerie alle Rezepte selektierst, bei dem eine Zutat vorhanden ist und darau ein IN machst. Wie gesagt, gleiches Problem.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Hi,

          sorry, ich kriegs wirklich nicht hin. Kannst du mir die Lösung nicht einfach sagen? Das sollte doch für jemanden der ein bisschen geübt ist in Sql kein Problem sein. Mir fehlt auch leider die Zeit momentan um mich da erst wieder einzuarbeiten.

          Comment


          • #6
            Hallo,
            Originally posted by chorschovic View Post
            ...sorry, ich kriegs wirklich nicht hin. Kannst du mir die Lösung nicht einfach sagen? Das sollte doch für jemanden der ein bisschen geübt ist in Sql kein Problem sein.
            Der muß deßhalb aber noch nicht deine Studienarbeit lösen!
            Originally posted by chorschovic View Post
            Mir fehlt auch leider die Zeit momentan um mich da erst wieder einzuarbeiten.
            Dann ist die Studienarbeit entweder nicht wichtig oder deine Prioritäten falsch...

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Eine "Rezeptdatenbank" als Studienarbeit, mmmh. Was studierst Du den?

              Gebe 1000 Programmieren ein und die selbe Aufgabe und man bekommt 1000 verschiedene Lösungen ... ein paar funktionieren dann sogar.
              Ich betrachte es deshalb mal als Gedankensport-Aufgabe und habe versucht, mir eine ganz andere Lösung auszudenken.
              Ist nicht getestet, sollte aber funktionieren. Nur ob Access das akzeptiert, da habe ich leichte Zweifel.

              [highlight=SQL]SELECT R.*
              FROM tblRezepte AS R
              INNER JOIN
              (SELECT SUB.RezeptName
              FROM tblZutaten AS SUB
              GROUP BY Main.RezeptName
              HAVING COUNT(*) =
              (SELECT COUNT(*)
              FROM tblZutaten AS Z
              INNER JOIN tblVorrat AS V
              ON Z.Name = V.Name
              WHERE V.Menge >= Z.Menge
              AND Z.RezeptName = SUB.RezeptName)

              ) AS InSide
              ON R.RezeptName = InSide.RezeptName[/highlight]
              Ich wünsche viel Spass dabei, wenn Du Deinem Prof die Lösung erklären sollst

              P.S.: Dein Model finde ich lustig, für jede Zutat je Rezept ein eigenes Lager. Wenn die Tomaten für Sauce Napolese ausgeht, kann man sich nicht an den für Pizza oder Tomatensuppe bedienen.
              Da kommen mir irgendwie die "Starving philosopher" in den Sinn ... weiß auch nicht wieso.
              Olaf Helper

              <Blog> <Xing>
              * cogito ergo sum * errare humanum est * quote erat demonstrandum *
              Wenn ich denke, ist das ein Fehler und das beweise ich täglich

              Comment


              • #8
                Hi,

                vielen Dank für deine Mühen

                Funktioniert aber leider nicht, er findet kein einziges Rezept (obwohl welche mit ausreichend Zutaten vorhanden sind).

                Ich studiere übrigens Wirtschaftsinformatik und ich bin, zugegeben nicht die größte Leuchte was Datenbanken angeht. Ich war jedenfalls froh, dass es funktioniert hat

                Aber, man kann sich trotzdem an den Tomaten von einem anderen Rezept bedienen, verstehe also nicht warum es so lustig ist?!

                Wegem dem erklären habe ich übrigens kein Problem. Das wäre die einzige Zeile von ca. 3000 die ich nicht selbst geschrieben habe und da wir 10% fremden Code verwenden dürfen ist das kein Thema.

                Comment


                • #9
                  Und die Variante? (ohne Daten schwer zu testen)

                  [highlight=SQL]SELECT R.*
                  FROM tblRezepte AS R
                  WHERE (SELECT COUNT(*)
                  FROM tblZutaten AS Z
                  WHERE R.RezeptName = Z.RezeptName)
                  =
                  (SELECT COUNT(*)
                  FROM tblZutaten AS Z
                  INNER JOIN tblVorrat AS V
                  ON Z.Name = V.Name
                  WHERE R.RezeptName = Z.RezeptName
                  AND V.Menge >= Z.Menge)
                  [/highlight]
                  Olaf Helper

                  <Blog> <Xing>
                  * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                  Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                  Comment


                  • #10
                    Hm,

                    leider immer noch leer. Soll ich das Access File mal uppen?

                    Comment

                    Working...
                    X