Hi,
ich brüte jetzt schon ein ganzes Weilchen vor folgendem Problem und frage jetzt mal hier um Rat:
ich habe zwei Tabellen:
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:
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
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 |
"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 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
Kommentar