LEFT JOIN mit NULL values

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

  • LEFT JOIN mit NULL values

    Hi,
    ich brüte jetzt schon ein ganzes Weilchen vor folgendem Problem und frage jetzt mal hier um Rat:

    ich habe zwei Tabellen:
    Code:
    tabelle1
    --------
    
    | p_id | ph_id | feld1 | feld2 |
    ------------------------------------------------
    |   8  |   1   | 2000  | 10750 |
    |   9  |   1   | 2003  | 15844 |
    |  10  |   1   | 2001  | 10125 |
    |  11  |   1   | 1999  | 10781 |
    |  12  |   1   | 1998  | 10341 |
    |  13  |   1   | 2000  | 10773 |
    |  10  |   2   | 1997  | 02120 |
    
    tabelle2
    --------
    
    | pc_id | p_id | ph_id | c_id |
    -------------------------------------------------------
    |   1   |   8  |   1   |  177 |
    |   2   |   9  |   1   |  177 |
    |   3   |  10  |   1   |  177 |
    |   4   |  11  |   1   |  854 |
    |   5   |   9  |   1   |  81  |
    |   6   |  13  |   1   |  66  |
    |   7   |  12  |   1   |  81  |
    |   8   |  10  |   1   |  45  |
    Ich möchte jetzt eine Abfrage haben die so lauten könnte:
    "Wähle alle Datensätze, bei denen in tabelle2 in der Spalte c_id z. B. 117 oder 81 steht und wähle dazu aus der tabelle1 alle dazugehörigen Felder aus"

    Mein Ergebnis soll so aussehen:
    Code:
    | p_id | ph_id | feld1 | feld2 | c_id |
    ------------------------------------------------
    |   8  |   1   | 2000  | 10750 |  177 |
    |   9  |   1   | 2003  | 15844 |  177 |
    |  10  |   1   | 2001  | 10125 |  177 |
    |  12  |   1   | 1998  | 10341 |   81 |
    Ich möchte keine doppelten Datensätze (doppelt in Bezug auf Kombination p_id und ph_id; die beiden Felder bilden den Primärschlüssel in tabelle1) erhalten.
    Ich habe bereits folgende Abfrage probiert:

    SELECT t1.*, t2.c_id FROM tabelle2 AS t2 LEFT JOIN tabelle1 AS t1 USING(p_id, ph_id) WHERE t2.c_id IN(177,81)

    Das gibt mir die korrekte Anzahl an Datensätze zurück, aber: die Spalte c_id hat die korrekten ids - alle anderen Spalten enthalten NULL Werte. Ich gehe mal davon aus, dass das schlicht mit dem LEFT JOIN zusammen hängt: alle Spalten, die nicht in der linken Tabelle enthalten sind aber in der rechten bekommen NULL values. Ich habe schon x-Varianten - auch mit RIGHT JOINs und INNER JOINs - ausprobiert; leider ohne dem erwünschten Erfolg.
    Geht das Ganze evtl. nicht mit einem einzigen SQL-Ausdruck? Muss ich also erst alle aus tabelle2 holen und über eine Schleife die restlichen Daten aus tabelle1?

    Falls mir jemand weiterhelfen kann, wäre ich sehr dankbar.

    Gruss,
    redouble

  • #2
    MOin,


    et voila!!!

    Code:
    SELECT t1. * , t2.c_id
    FROM tabelle2 AS t2
    JOIN tabelle1 AS t1
    USING ( p_id, ph_id ) 
    WHERE t2.c_id
    IN ( 177, 81 ) 
    GROUP BY t1.p_id, t1.ph_id
    Sollte jetzt eigentlich Dein Ergebnis liefern!

    Bye,
    Heinzelmännchen

    Kommentar


    • #3
      Hi!

      Erstmal vielen Dank! ... und sorry, dass der erst jetzt kommt.
      Zuerst ging es mit dem SQL-Befehl nicht ... warum und weshalb - keine Ahnung. Aus Frust lag das Problem dann erstmal auf Eis - und jetzt hab' ich es mir noch mal angeschaut und ziemlich genau diesen noch einmal versucht - und siehe da - es geht

      Manchmal arbeitet die Zeit offenbar auch für einen

      Gruss,
      redouble

      Kommentar


      • #4
        Mache es auch ähnlich!

        Wenn ich erst einmal nicht weiterkomme dann lege ich es für 2 Wochen auf Eis. Nach dieser Zeit habe ich meistens eine komplett andere Vorstellung von dem ganzen und gehe daher auch ganz anders dann mit dem Problem um.

        Bye,
        Heinzelmännchen

        Kommentar

        Lädt...
        X