Ankündigung

Einklappen
Keine Ankündigung bisher.

verschiedene [mySQL]-Abfragen (schwierig zu beschreiben)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • verschiedene [mySQL]-Abfragen (schwierig zu beschreiben)

    Guten Abend,

    also ich habe folgende Aufgaben, die zur Vorbereitung einer mündlichen Prüfung sind und ich zerbreche mir seit Stunden den Kopf darüber und komme einfach nicht weiter. Dieses Posting wird wohl etwas länger, aber vielleicht hat jemand Lust und Zeit mir zu helfen... ich wäre sehr dankbar.

    Da ich bei vielem nicht mal den Hauch einer Ahnung habe, kann ich auch schlecht danach suchen, also entschuldigt bitte, wenn ich hier etwas frage, was schonmal jemand gefragt hat.

    Wir haben eine Relation Lieferant mit den Atrributen Firma, Ware und Preis. Das diese Tabelle so nicht unbedingt die schönste Form hat (3NF und so), weiß ich, aber sie ist leider vorgegeben.
    Die Waren sind unter anderem Milch, Mehl und noch viele unbekannte andere. Firma ist der Name der Firma und Preis sollte klar sein. Für jede neue Ware wird also eine neue Zeile erstellt mit dem Namen der Firma, der Ware und dem Preis der Ware.

    Hier ist einmal die Tabelle für diejenigen, die sie vielleicht in ihre Datenbank zum Testen übernehmen möchten:

    Code:
    CREATE TABLE `lieferant` (
      `Firma` varchar(10) NOT NULL default '',
      `Ware` varchar(10) NOT NULL default '',
      `Preis` bigint(10) NOT NULL default '0'
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    #
    # Daten für Tabelle `lieferant`
    #
    
    INSERT INTO `lieferant` VALUES ('Meier', 'Zucker', 18);
    INSERT INTO `lieferant` VALUES ('Meier', 'Eier', 16);
    INSERT INTO `lieferant` VALUES ('Meier', 'Mehl', 89);
    INSERT INTO `lieferant` VALUES ('Müller', 'Mehl', 345);
    INSERT INTO `lieferant` VALUES ('Schmidt', 'Milch', 78);
    INSERT INTO `lieferant` VALUES ('Schmidt', 'Mehl', 576);
    INSERT INTO `lieferant` VALUES ('Soso', 'Mehl', 78);
    INSERT INTO `lieferant` VALUES ('Soso', 'Zucker', 79);
    INSERT INTO `lieferant` VALUES ('Majo', 'Majo', 874);
    INSERT INTO `lieferant` VALUES ('Majo', 'Eier', 78);
    INSERT INTO `lieferant` VALUES ('Bulli', 'Milch', 839);
    INSERT INTO `lieferant` VALUES ('Ecki', 'Milch', 3738);
    INSERT INTO `lieferant` VALUES ('Soso', 'Eier', 70);
    Jetzt haben wir folgende Aufgaben:

    1. Wer liefert nur Milch ?

    2. Wer liefert alle Waren, die auch die Firma Meier liefert ?

    3. Bestimmen sie zu jeder Ware den günstigsten Lieferanten.

    Ich habe schon etliche Versuche gemacht, aber bei Frage 1 fehlt mir einfach so eine Art "nur" in mySQL... ich finde da keinen Weg die anderen Tupel auszuschließen, die auch andere Waren liefern. Bei 2. fehlt mir sozusagen ein "Array", in den ich die Waren von Meier packen könnte und mit den Waren der anderen vergleichen könnte. Mit PHP wäre das alles schön einfach, aber wir sollen es ja nur in mySQL lösen...

    Wir hatten noch mehr Fragen, aber die haben wir schon gelöst.

    An Alle, die sich die Mühe machen, das hier alles zu lesen und mir zu helfen: 1000x Danke

    Grüße
    Stephan

  • #2
    das problem hatte ich schon einmal und ich habe mehrere foren befragt, sowas wie ein minus select oder ein ersatz gibt es in mysql nicht.

    wenn hier jemand jetz ne antwort drauf hätte würde mich das sehr ärgern, daß damals keiner eine hatte, wo ich das problem hatte

    edit:
    ich sehe grad, das war doch ein bischen anders das problem damals.. hier könnte mans vielleicht doch umgehen...

    also ich würds so ähnlich probieren (aufgabe1)
    edit:
    Code:
    select count(firma), ware from liferant group by ware having ware="Milch" and count(firma)=1;
    edit:
    ne geht nicht.. sorry hab keine ahnung, bist du sicher, daß das auf mysql gehn muss?

    Kommentar


    • #3
      ja, muss 100%ig nur in mySQL gehen und wir dürfen das Schema der Tabelle auch nicht verändern...

      dennoch danke für die Mühe

      Kommentar


      • #4
        Die Sache mit der Milch

        Code:
        SELECT
        		firma,
        		GROUP_CONCAT(ware) AS waren
        FROM    lieferant
        GROUP
             BY firma
        HAVING	waren = 'Milch'

        Kommentar


        • #5
          Der Preis

          Code:
          SELECT
                firma,
                ware,
                Preis
          FROM    lieferant
          GROUP
               BY ware
          ORDER
               BY     Preis ASC

          Kommentar


          • #6
            WOW, danke, genau sowas habe ich gebraucht. Wieder mal eine einfache Lösung auf die wir aber niemals gekommen wären.

            aber eine Frage hab ich noch: was macht GROUP_CONCAT ??? ich hab schon danach gesucht und im "Manual" von mysql.com nachgeschaut, aber selbst LEO kennt das Wort "concat" nicht... brauche also eine Übersetzung davon.

            danke nochmal

            Kommentar


            • #7
              Zitat von me1ssner
              aber selbst LEO kennt das Wort "concat" nicht... brauche also eine Übersetzung davon.
              MySQL hat uns die lange version erspart ^^
              http://dict.leo.org/se?lp=ende&p=/Mn...ch=concatenate

              Kommentar


              • #8
                achso, okay.

                Danke.

                Kommentar

                Lädt...
                X