Ein JOIN Problem in MySQL

Erraser

Grünschnabel
Hallo,

ich habe ein Problem mit einem Join.

Folgendes, ich lese aus eine Tabelle alle Einträge eines Nutzers mit einer bestimmten ID aus: Funktioniert

In dieser Tabelle sind 2 Spalten, die eine ID aus EINER anderen Tabelle enthalten.

Nun habe ich versucht, mit einem Join den Namen zu der ID aus der zweiten Tabelle zu lesen: Funktioniert

Wenn ich aber nun mit AND ODER OR oder XOR die zweite id abfrage dann bringt er mir den namen aber Schreib dafür ne neue Zeile. Und das soll er ja nicht weil ich dann alle Zeilen doppelt hab.

Zum Veranschaulichen:
Code:
SELECT t1.* t2.name FROM t1 JOIN t2 ON t1.id_t2 = t2.id_t2 WHERE t1.id_user = 1;
Das funktioniert, mache ich aber folgendes:
Code:
SELECT t1.* t2.name FROM t1 JOIN t2 ON t1.id_t2_id1 = t2.id_t2 OR t1.id_t2_id2 = t2_t2 WHERE t1.id_user = 1;
schreibt er die besagte 2. Zeile die er mir dann auch leider ausgibt.

Wäre schön, wenn mir jemand helfen könnte.
 
Sind die ausgegebenen Zeilen identisch? Dann würde DISTINCT helfen. Evtl. ginge es auch über eine GROUPierung auf Grundlage der t2.id.

Btw. hast Du das

Code:
t1.id_t2_id2 = t2_t2

absichtlich so geschrieben? Nicht, dass Du dort einen Schreibfehler hast. Eigentlich müsste es doch t2.id_t2 sein?
 
Ist ein Schreibfehler. srry

Mit DISTINCT hatte ich es schon probiert aber leider ohne Erfolg. Es bleiben 2 Zeilen.

Vielleicht noch ne Idee?
 
Klar, dass es zwei sind. Denn bei der einen trifft der linke Teil - der mit OR Verknüpften Bedingung - zu und bei der anderen der rechte Teil.

Was willst du denn erreichen mit dem OR? Beispieldaten wären sinnvoll. Handelt es sich um eine 1:N Beziehung oder N:M?

Zeig uns auch am besten nochmal die Abfrage ohne Schreibfehler und am besten sinnvoll formatiert.
 
In der ersten Tabelle stehen in 2 Spalten id's deren zugehörige Namen in der zweiten Tabelle stehen.

Ich möchte also statt der id's die Namen haben um sie auszugeben.
 
Wenn ich dich richtig verstehe musst du die gleiche Tabelle (t2) zwei mal Joinen (jeweils mit einem Alias).

Ich werde aus deiner Namensgebung nicht schlau, deshalb mal ein Schuss ins blaue

SQL:
SELECT			t1.*, t2_1.name, t2_2.name
FROM			t1
JOIN			t2 AS t2_1 ON t1.id_t2_id1 = t2_1.id_t2
JOIN			t2 AS t2_2 ON t1.id_t2_id2 = t2_2.id_t2
WHERE			t1.id_user = 1;
 
SQL:
SELECT w.*, i.insulin_name 
FROM bz_werte AS w 
JOIN insuline AS i ON w.id_insuline_1 = i.id_insuline 
OR w.id_insuline_2 = i.id_insuline 
WHERE w.id_user = 1

Aus bz_werte liest er alle werte des Nutzes aus. In w.id_insuline_1 und 2 liegen jeweils eine ID aus der Tabelle Insuline. Ich möchte aber nicht deren ID ausgeben sondern deren Namen, der in der Tabelle Insuline steht.
 
Dann schreib ich dir meine Lösung eben nochmal mit anderen Bezeichnern auf

SQL:
SELECT          w.*, i1.name, i2.name
FROM            bz_werte AS w
JOIN            insuline AS i1 ON w.id_insuline_1 = i.id_insuline
JOIN            insuline AS i2 ON w.id_insuline_2 = i.id_insuline
WHERE           w.id_user = 1;

Edit: Falls das nicht die Lösung zu deiner Frage ist, dann beantworte mir bitte folgendes:
Was ist der Unterschied zwischen id_insuline_1 und id_insuline_2? Wieso gibt es zweimal diesen Fremdschlüssel? Wenn die beide Spalten jeweils auf einen Eintrag in der "insuline" Tabelle zeigen, dann funktioniert meine Lösung.
 
Das hatte ich nach deinem ersten Post schon probiert.

Kommt folgende Meldung zurück: 1054 - Unknown column 'i1.name' in 'field list'.
 

Neue Beiträge

Zurück