Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten aus Tabelle 1 über Vergleich mit Tabelle 2 ziehen (MySQL)

Einklappen

Neue Werbung 2019

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

  • Daten aus Tabelle 1 über Vergleich mit Tabelle 2 ziehen (MySQL)

    Hey,

    sorry, ich gehe mal schwer davon aus, dass mein Problem ein oftmals besprochenes ist, aber trotz Manual lesen und Suche komme ich nicht zu dem Ergebnis, dass ich haben möchte.

    Ich habe zwei Tabellen Eins und Zwei.

    Tabelle Eins:

    Code:
    +------+------+
    |  a   |   b  |
    +------+------+
    |  1   |   2  |
    +------+------+
    Tabelle Zwei:

    Code:
    +------+------+
    |  x   |   y  |
    +------+------+
    |  4   |   1  |
    +------+------+
    Ich möchte `b` aus Tabelle Eins bekommen über einen Vergleich zwischen `Eins`.`a`=`Zwei`.`y` AND `Zwei`.`x`='4'.

    Ich versuchs die ganze über einen LEFT JOIN allerdings funktioniert das nicht.

    Code:
    SELECT `Eins`.`b` FROM `Eins`
      LEFT JOIN `Zwei` ON `Eins`.`a`=`Zwei`.`y`
      WHERE `Zwei`.`x`='4'
    ... gibt null Zeilen zurück. Mir ist denke ich auch klar warum (fehlende Spalte `x` in `Eins`) aber ich komm nicht dahinter wie ich das Query aufziehen kann.

    Vielen Dank für Hilfe,

    Grüße


  • #2
    Zitat von juice122 Beitrag anzeigen
    Ich habe zwei Tabellen Eins und Zwei.
    Problembeschreibungen zu sowas sind meist verständlicher, wenn du nicht derart weit abstrahierst - sondern näher an deinem realen Datenmodell bleibst.

    Code:
    SELECT `Eins`.`b` FROM `Eins`
      LEFT JOIN `Zwei` ON `Eins`.`a`=`Zwei`.`b`
      WHERE `Zwei`.`x`='4'
    Siehst du, du schaust schon selbst nicht mehr durch - in deiner Tabelle zwei gibt es gar keine Spalte b.


    Generelles zum Thema JOINs findest du hier in zwei Artikeln sehr gut erklärt:
    http://aktuell.de.selfhtml.org/artikel/datenbanken/
    Die solltest du aufmerksam durchgearbeitet haben, bevor du weiter fragst.

    Kommentar


    • #3
      Ein Schreibfehler, mehr nicht. Gefixed. Wenn ich mit nem Realbeispiel ankommen würde, würde die Zeit dieses zu erläutern länger dauern als den kleinen Schreibfehler zu beheben.

      Code:
        LEFT JOIN `Zwei` ON `Eins`.`a`=`Zwei`.`y`
      war gemeint.

      Bin die Beispiele in dem Link durchgegangen, leider keines darunter das meinem Problem entspricht.

      Kommentar


      • #4
        Zitat von juice122 Beitrag anzeigen
        Bin die Beispiele in dem Link durchgegangen, leider keines darunter das meinem Problem entspricht.
        Dein Problem glänzt ja auch durch Nichtexistenz.

        Dein Code, mit deinen Beispieltabellen ausgeführt, liefert genau einen Datensatz mit der Spalte b und dem Wert 2.

        Kommentar


        • #5
          ein mögliches Beispiel..

          Code:
          CREATE TABLE eins (
           a INT NOT NULL,
           b INT NOT NULL
          );
          
          INSERT INTO eins VALUES
          ( 1, 2);
          
          CREATE TABLE zwei (
           x INT NOT NULL,
           y INT NOT NULL
          );
          
          INSERT INTO zwei VALUES
          ( 4, 1);
          
          
          mysql> SELECT b
              ->   FROM eins
              ->  WHERE a IN ( SELECT y FROM zwei WHERE x = 4 );
          +---+
          | b |
          +---+
          | 2 |
          +---+
          1 row in set (0.06 sec)
          
          mysql>
          Habe ich es richtig verstanden..?

          Grüße
          Thomas

          Kommentar


          • #6
            Zitat von ChrisB
            ...
            Ok... zum Glück steh ich trotzdem noch davor

            Mein Code liefert mir leider keine Zeile mit keinem Wert (wie im ersten Post erwähnt) weswegen ich mich an dieses Forum gewendet habe.

            Dadurch, dass ich versch. Spaltennamen verwende kann ich kein vergleichbares Beispiel finden, ich denke vor meinem Problem standen schonmal welche und selbst wenn nicht, bin immer noch ich da.

            Lass es mich mit einem Realbeispiel versuchen, vll. gibt's dann anstelle von Beschwerden Hilfe:

            Tabelle 1: haeuser

            Code:
            +--------+-------------------+
            |   id    |       Addr     |
            +--------+-------------------+
            |    1   |  Beispielstr      |
            |    2   |  Wieauchimmerstr  |
            |    3   |  Nochnestr        |
            +--------+-------------------+
            Tabelle 2: bewohner

            Code:
            +--------+------+
            | person | haus |
            +--------+------+
            |    1   |  3   |
            |    2   |  2   |
            |    3   |  1   |
            +--------+------+
            Nun möchte ich z.B. von Person 3 über die HausID an die Adresse herankommen.

            Das ganze würde (wenn es über mein LEFT JOIN - query funktioniert hätte) so aussehen:

            Code:
            SELECT `haeuser`.`Addr` FROM `haeuser`
              LEFT JOIN `bewohner` ON `haeuser`.`id`=`bewohner`.`haus`
              WHERE `bewohner`.`person`='3'
            Mit dem gewünschten Ergebnis:

            Code:
            Addr
            
            Beispielstr
            Leider aber:
            MySQL lieferte ein leeres Resultat zurück (d. h. null Zeilen). ( die Abfrage dauerte 0.0003 sek. )
            Es kann auch möglich sein, dass ich mit LEFT JOIN total falsch liege, wie gesagt, ich weiß es nicht, deswegen frage ich.


            Edit: Danke Thomas, ich werds gleich ausprobieren, ich glaube Du hast mir mal wieder direkt aus der Patsche geholfen

            Edit2: (falls überhaupt jemand geänderte Beiträge liest ^^) Vielen Dank Thomas, genau das wars.

            Kommentar


            • #7
              Zitat von juice122 Beitrag anzeigen
              Vielen Dank Thomas, genau das wars.
              Nein, das ist was anderes.

              Der JOIN wurde durch eine Subquery ersetzt.
              Kann man in vielen Fällen machen, ist aber oftmals die unperformantere Variante.

              Das alles ändert aber nichts daran, dass dein Code mit den Beispieldaten von anfangs einwandfrei funktioniert - getestet mit MySQL 5.1

              Das gleiche mit deinem Häuser-Beispiel - liefert mit exakt den Daten und exakt der Abfrage wie erwartet genau einen Datensatz, "Beispielstr".

              Lass es mich mit einem Realbeispiel versuchen, vll. gibt's dann anstelle von Beschwerden Hilfe
              Wie soll man dir helfen (können), wenn alle deine Problembeschreibungen bei den gegebenen Beispieldaten objektiv nicht nachvollziehbar sind?

              Kommentar


              • #8
                Schon recht, deswegen wars einem anderen Nutzer auch möglich darüber hinweg zu sehen und mir einfach kurz zu helfen.

                Eine kleine Hilfe - wenn Du dir schon die Mühe gemacht hast, den Code selbst auszuprobieren - wäre bspw. ein kurzen Kommentar gewesen, "Die Queries funktionieren bei mir optimal, schau halt nochmal nach".

                Ich reg mich auch auf, wenn Leute mit unmöglichen Beispielen daherkommen oder simple Denkfehler drinhaben - selbst aber zu faul sind danach zu schauen - allerdings weise ich dann darauf hin oder frag nochmal nach, anstelle das Geschriebene kurz als unzureichend abzutun.

                Darüber hinaus fällt mir auch auf, dass sowas speziell in vergleichbaren Foren wie diesem der Fall ist. Stellt man eine Frage trifft man immer erstmal auf "distanzierte" Resonanz.

                Wie auch immer...

                Ich bin die Beispiele nochmal durchgegangen und hab's auf mein Problem speziell hin auch nochmal angewendet - du hast recht, es funktioniert mit LEFT JOIN. Ich hatte dann einen anderen Fehler im Code.

                Wenn Du mir rätst aufgrund höhere Performance lieber LEFT JOIN zu verwenden, nehme ich das gerne an.

                Kommentar


                • #9
                  wäre bspw. ein kurzen Kommentar gewesen, "Die Queries funktionieren bei mir optimal, schau halt nochmal nach"
                  Dein Problem glänzt ja auch durch Nichtexistenz.

                  Dein Code, mit deinen Beispieltabellen ausgeführt, liefert genau einen Datensatz mit der Spalte b und dem Wert 2.
                  Wo auch immer jetzt der große Unterschied sein soll.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Wohl in der Zeitdifferenz.

                    Kommentar


                    • #11
                      Willst du mir jetzt auch noch ankreiden, dass ich deinen Code nicht sofort und augenblicklich getestet habe, weil es für mich zunächst nur so aussah, als ob du ein generelles Verständnisproblem bzgl. JOINs hättest ...?

                      Kommentar


                      • #12
                        Nein Mann ich will einfach dass du still bist und mir nicht deine Moderator Freunde aufn Hals hetzt.

                        Kommentar


                        • #13
                          Pff, lächerlich. Eine persönliche Beleidigung erkenne ich auch so. Und Du kneifst jetzt besser mal langsam die Backen zusammen, sonst ist für Dich in diesem Forum Feierabend. Trolle braucht hier niemand.

                          [MOD: Thread geschlossen]
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar

                          Lädt...
                          X