Join Problem

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Join Problem

    Hallo!

    War ewig nicht hier und habe aber nun mal wieder ein Problem, was wahrscheinlich nicht so schwer zu lösen sein wird (hoffe ich).

    Ich habe zwei Tabellen in einer mysql-DB.

    1.
    CREATE TABLE `produkte` (
    `produkt_id` smallint(4) unsigned zerofill NOT NULL default '0000',
    `produktname` tinytext NOT NULL,
    `produktpreis` decimal(6,2) NOT NULL default '0.00',
    `bestand` smallint(4) NOT NULL default '0',
    PRIMARY KEY (`produkt_id`)
    ) TYPE=MyISAM;

    2.
    CREATE TABLE `eingang_ausgang` (
    `verkauf_id` double NOT NULL auto_increment,
    `produkt_id` smallint(4) unsigned zerofill NOT NULL default '0000',
    `anzahl` smallint(4) NOT NULL default '0',
    `verkaufsumme` decimal(8,2) NOT NULL default '0.00',
    `datum` varchar(8) NOT NULL default '0',
    `art` tinytext NOT NULL,
    PRIMARY KEY (`verkauf_id`)
    ) TYPE=MyISAM AUTO_INCREMENT=0;

    Ich möchte nun eine Abfrage formulieren, die mir aus der Tabelle 'eingang_ausgang', in der alle Ein- und Verkäufe gespeichert sind, anzahl, verkaufsumme, datum ausliest und mir dazu aus der Tabelle 'produkte' den produktname dazu liefert.

    In beiden Tabellen existiert die produkt_id und darüber wollte ich die Verbindung herstellen.

    Mein Versuch mit ...

    SELECT anzahl, verkaufsumme, datum, produkt_id, produktname FROM eingang_ausgang
    INNER JOIN produkte
    ON eingang_ausgang.produkt_id = produkte.produkt_id

    ... ist leider gescheitert.

    EDIT: Fehlermeldung ... "... in field list is ambiguous"

    Kann mir netterweise jemand, der über meine Anfängerschwierigkeiten großzügig hinwegsehen kann, auf die Sprünge helfen?

    Danke und Gruß

    Smartsoul
    Zuletzt geändert von Smartsoul; 15.11.2007, 17:54.
    [FONT=arial][COLOR=orangered]
    Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
    [/COLOR]

    ... und nicht vergessen: der Ton macht die Musik ;-)

    ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
    [/FONT]

  • #2
    Habe die Abfrage nun mit Hilfe des Threads von MrHappiness umgebaut und folgendes draus gemacht:

    SELECT anzahl.t1, verkaufsumme.t1, datum.t1, produkt_id.t1, produktname.t
    FROM eingang_ausgang t1
    INNER JOIN produkte t
    USING produkt_id

    Jetzt ist nichts mehr ambigous, aber dafür kommt ...

    #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'produkt_id LIMIT 0, 30' at line 1
    [FONT=arial][COLOR=orangered]
    Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
    [/COLOR]

    ... und nicht vergessen: der Ton macht die Musik ;-)

    ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
    [/FONT]

    Kommentar


    • #3
      Statt anzahl.t1 mußt du t1.anzahl schreiben. Gilt natürlich nicht nur für anzahl ...

      Kommentar


      • #4
        Original geschrieben von onemorenerd
        Statt anzahl.t1 mußt du t1.anzahl schreiben. Gilt natürlich nicht nur für anzahl ...
        Neues Statement:

        SELECT t1.anzahl, t1.verkaufsumme, t1.datum, t1.produkt_id, t.produktname
        FROM eingang_ausgang t1
        INNER JOIN produkte t
        USING produkt_id

        Danke für den Tipp, aber das hat an der Fehlermeldung ...

        #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'produkt_id LIMIT 0, 30' at line 1

        leider nichts geändert. :-(
        [FONT=arial][COLOR=orangered]
        Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
        [/COLOR]

        ... und nicht vergessen: der Ton macht die Musik ;-)

        ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
        [/FONT]

        Kommentar


        • #5
          ... USING ( produkt_id ) ...

          http://dev.mysql.com/doc/refman/5.0/en/join.html

          Kommentar


          • #6
            SUPER! THX! Hab ich mal wieder nicht genau hingeschaut beim Abschreiben. SORRY!

            Noch eine Frage an den Experten:

            Ist es von der Belastung der DB her schlau, in diesem Fall mit INNER JOIN und USING zu arbeiten oder wäre eine andere Variante ressourcensparender? Ich möchte die Abfrage noch mit einem WHERE eingrenzen.

            Nicht dass es in meiner Anwendung eine Rolle spielen würde, aber es würde mich neugierigerweise interessieren. ;-)
            Zuletzt geändert von Smartsoul; 15.11.2007, 18:53.
            [FONT=arial][COLOR=orangered]
            Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
            [/COLOR]

            ... und nicht vergessen: der Ton macht die Musik ;-)

            ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
            [/FONT]

            Kommentar


            • #7
              Mein Test hat ergeben:

              SELECT t1.anzahl, t1.verkaufsumme, t1.datum, t1.produkt_id, t.produktname FROM eingang_ausgang t1 INNER JOIN produkte t USING (produkt_id) WHERE datum = 20071115

              funktioniert.

              Aber

              SELECT t1.anzahl, t1.verkaufsumme, t1.datum, t1.produkt_id, t.produktname FROM eingang_ausgang t1 INNER JOIN produkte t USING (produkt_id) ON t1.datum = 20071115

              funktioniert nicht

              ???
              [FONT=arial][COLOR=orangered]
              Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
              [/COLOR]

              ... und nicht vergessen: der Ton macht die Musik ;-)

              ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
              [/FONT]

              Kommentar


              • #8
                Wieso sollte das auch funktionieren?

                Kommentar


                • #9
                  @ TobiaZ

                  Danke für die aufschlussreiche Frage!

                  Antwort:

                  Weil ich dachte, dass ON eine Möglichkeit wäre, um eine Abfrage einzugrenzen und mir, wie du wahrscheinlich bemerkt hast, die Bedeutung des ON in einem SQL-Statement nicht klar ist.

                  Wenn ich mir darüber, so wie du, im Klaren wäre, hätte ich wahrscheinlich nicht zu diesem Thema gepostet.
                  [FONT=arial][COLOR=orangered]
                  Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                  [/COLOR]

                  ... und nicht vergessen: der Ton macht die Musik ;-)

                  ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                  [/FONT]

                  Kommentar


                  • #10
                    Ganz ehrlich. Wenn dir die Bedeutung nicht klar ist, dann lies im Manual nach. Da schützt auch deine Signatur nicht vor.

                    Es lässt sich leicht herausfinden, dass ON den JOIN Bedingungen vorenthalten ist. Das macht auch von Namen her Sinn.

                    Zu guter letzt ist es wohl klüger für eine Vermutung/Behauptung einen konkreten Grund zu haben. Ich frag doch auch nicht wieso

                    SELECT * FROM table WITH 1=1

                    nicht funktioniert, oder?

                    Damit war meine Gegenfrage sicher klüger als deine.

                    Kommentar


                    • #11
                      Original geschrieben von TobiaZ Wenn dir die Bedeutung nicht klar ist, dann lies im Manual nach.
                      Das wurde mir ja eben erst durch deine aufschlussreiche Frage klar! ;-)

                      Original geschrieben von TobiaZ Da schützt auch deine Signatur nicht vor.
                      Und ich dachte schon, damit hätte ich in Drachenblut getaucht.


                      Original geschrieben von TobiaZ
                      Damit war meine Gegenfrage sicher klüger als deine.
                      Wenn es mir darum ginge, besonders klug zu erscheinen, würde ich mich hüten, jemals in einem Forum eine Frage zu stellen. Aber es soll ja Menschen geben, die so klug sind, dass sie in ihrem Leben noch nie eine dumme Frage gestellt haben, nicht wahr?

                      Trotzdem danke für den Tipp mit dem Manual!

                      Hoffe, ich stehe jetzt nicht auf deiner Blacklist, wenn ich mal mit einer klugen Frage daherkomme, wo ich mir bereits im Vorfeld im Klaren über meine Fehler bin. :-)
                      [FONT=arial][COLOR=orangered]
                      Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                      [/COLOR]

                      ... und nicht vergessen: der Ton macht die Musik ;-)

                      ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                      [/FONT]

                      Kommentar

                      Lädt...
                      X