Ankündigung

Einklappen
Keine Ankündigung bisher.

[Fast erledigt] 2 Tabellen vergleichen und X ausgeben, falls Y in einer vorhanden

Einklappen

Neue Werbung 2019

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

  • [Fast erledigt] 2 Tabellen vergleichen und X ausgeben, falls Y in einer vorhanden

    Hey,

    ich häng an dem Problem und Suche bzw. Google, sowie mysql-docs haben mich nicht weitergebracht, da alle Themen andere Probleme behandeln.

    Ich möchte eine gleichenamige Spalte A in zwei Tabellen vergleichen und falls der Wert X in Spalte B (ebenfalls in beiden Tabellen) in einer existiert, den Wert Y aus Spalte A ausgeben.

    Nachdem ich left join nicht ganz so gut nachvollziehen konnte - hab ichs mit "if" versucht.

    Das ganze sieht dann so aus:

    Code:
    SELECT 
    IF(
    	(SELECT `B` FROM `tab1` where `tab1`.`A` = WERT_X LIMIT 1) 
    	OR
    	(SELECT `B` FROM `tab2` where `tab2`.`A` = WERT_X LIMIT 1),
    	// hier muss der return wert rein
    	0 // ifnot = 0
    ); // return von select ist WERT Y

    Problem 1: Ich weiß nicht was ich als return Wert reinschreiben soll, möglich wäre nochmal eine OR Verknüpfung (denk ich), aber es geht sicher auch sauberer/besser.

    Problem 2: Das Query is jetzt schon riesig groß, also bin ich mir sicher es gibt da eine schönere Lösung.


    Im Vorraus vielen Dank für jede Art von Hilfe!

    Gruß

    Edit: Wollte noch anmerken - muss ein reines MySQL query sein.


  • #2
    Am Besten läßt sich so ein Problem mit einem ausführlichen Beispiel erklären.

    Code:
    CREATE TABLE test_1 (
     id INT NOT NULL,
     feldA INT NOT NULL,
     feldB INT NOT NULL 
    );
    
    CREATE TABLE test_2 (
     id INT NOT NULL,
     feldA INT NOT NULL,
     feldB INT NOT NULL 
    );
    
    INSERT INTO test_1 VALUES
    ( 1, 10, 20),
    ( 2, 11, 21),
    ( 3, 12, 22),
    ( 4, 13, 23);
    
    INSERT INTO test_2 VALUES
    ( 1, 10, 20),
    ( 2, 11, 21),
    ( 3, 102, 202),
    ( 4, 103, 203);
    
    
    SELECT 1, feldb FROM test_1 WHERE felda = 10
    
    UNION ALL
    
    SELECT 2, feldb FROM test_2 WHERE felda = 10;
    
    +---+-------+
    | 1 | feldb |
    +---+-------+
    | 1 |    20 |
    | 2 |    20 |
    +---+-------+
    2 rows in set (0.03 sec)
    
    mysql>
    Soweit habe ich Deine Frage verstanden. Was genau möchtest Du jetzt haben?

    Grüße
    Thomas

    Kommentar


    • #3
      Zitat von juice122 Beitrag anzeigen
      Ich möchte eine gleichenamige Spalte A in zwei Tabellen vergleichen und falls der Wert X in Spalte B (ebenfalls in beiden Tabellen) in einer existiert, den Wert Y aus Spalte A ausgeben.
      Ich versuchs' nochmal mit einem JOIN, aufgrund deiner Beschreibung.

      SELECT t1.`Spalte A` FROM table1 AS t1
      INNER JOIN table2 AS t2 USING(`Spalte A`)
      WHERE t1.`Spalte B` = 'Wert X' OR t2.`Spalte B` = 'Wert X'

      Kommentar


      • #4
        Vielen Dank für eure Antworten ich werds gleich ausprobieren - zuvor noch ein Versuch das anhand eines Ausführlichen Beispiels zu erklären :

        (( Das Beispiel klingt jetzt dumm, aber mir fällt grad nachm aufstehen nichts besseres ein ^^ ))

        Wir haben zwei Tabellen (nennen wir sie `user_1` und `user_2`, die Usergroups darstellen. Diese Tabellen speichern in 2 Spalten die UserID (Wert Y) sowie ein Attribut (Wert X).

        Während das Attribut gleich sein kann, muss die höchste UserID natürlich unterschiedlich sein.

        Was ich mit dem Query erreichen möchte ist die UserID (Wert Y) returnen die ein bestimmtes Attribut (X) besitzt, jedoch dazu beide Tables im selben Query durchsuchen.

        `user_1` sieht so aus:

        Code:
        +-------+---------+
        | userID | Attribut |
        +-------+---------+
        |    1     |     8     |
        |    2     |     5     |
        |    4     |     4     |
        +-------+---------+
        `user_2`:

        Code:
        +-------+---------+
        | userID | Attribut |
        +-------+---------+
        | 3	 | 1       |
        | 5     | 5       |
        | 6     | 88      |
        +-------+---------+
        Jetzt such ich z.B. nach Attribut=5 und möchte die größte `userID` zurück (ORDER BY `userID` DESC LIIMIT 1). Return wäre in dem Fall "5"

        Suche ich nach Attribut=3, bekomme ich nichts zurück.

        Suche ich nach Attribut=88, bekomme ich "6" zurück.

        Mir ist grad selbst aufgefallen, dass ich mich undeutlich ausgedrückt hab, sorry - aber das Problem verwirrt mich selbst dermaßen...


        Edit: Hab jetzt die Queries ausprobiert. Union all scheint gut zu funktionieren mit INNER JOIN hab ichs wieder nicht hinbekommen (liegt aber an mir ).

        Vielen Dank für eure Antworten. Wenn ihr noch was besseres wisst lasst es mich gerne wissen

        Grüße

        Kommentar


        • #5
          Geht nicht auch weniger kryptisch ohne A, B und X? Mach doch mal ein Real-Beispiel, mit Feldern, unter denen man sich was vorstellen kann. Es guckt Dir schon niemand was ab.
          --

          „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


          • #6
            Als obs mir darum gehen würde... Ich denk nicht dass jmd nach Hilfe in nem Forum sucht, der Angst hat jmd könnte ihm/ihr was abgucken - ich geh mal schwer davon aus, dass die meisten hier zu weit mehr fähig sind als ich.

            Problem ist, dass das Real Beispiel äußert behindert und sehr speziell ist. Deswegen hab ichs mit einem kleinen Transfer versucht. Mein Real Beispiel besteht auch nur zwei Tabellen mit zwei columns, eine mit unique, eine mit u.U. gleichen Werten und ich möchte den größten unique Wert über die u.U. gleichen Werte grabben.

            Sorry ich kanns nicht einfacher beschreiben, mich verwirrt das selbst zu sehr. Wenn du in meinen letzten Post guckst, siehst ja dass ichs mal versucht hab zu umschreiben (mit user_id und attribute).

            Aber ich hab ja Hilfe bekommen und es funktioniert wunderbar mit UNION ALL.


            Edit: Neue Frage, habt ihr ne Idee wie ich auch noch grabben kann von welcher Tabelle der Wert jetzt kam (Tabelle 1 oder 2)?

            Mit SELECT ... AS funktionierts leider nicht.

            Kommentar

            Lädt...
            X