MySQL: JOIN nur bei übereinstimmender ID


tvtotal

Erfahrenes Mitglied
Hallo, ich habe folgende Listenabfrage und möchte fragen, ob es möglich ist, die beiden JOINS nur auszuführen, wenn die books1.aid mit einem vorhandenen Variablenwert (z.B. 234) übereinstimmt?

Tab1: books1

aid pid value1 value2
123 567 aa bb
234 678 aa bb
345 678 al ak


Tab2: books2

aid pid value1 value2
123 567 xx yy
234 678 zz dd
345 678 au ap

Tab3: books3

aid valuex valuey
123 vv ww
234 vv ww
345 bu bp


SQL:
select books3.valuex as valuex IFNULL(books2.value1, books1.value1) as value1, IFNULL(books2.value2, books1.value2) as value2 from books1

LEFT JOIN books2 ON books2.aid = books1.aid

LEFT JOIN books3 ON books3.aid = books1.aid

where books1.pid = '678';
Danke...
 

tvtotal

Erfahrenes Mitglied
Danke für die Antwort.

Der Wert books3.valuex as valuex aus der obigen Abfrage müsste für books1.aid = 345 dann alleine, also ohne Werte aus Joins, in der Ausgabe stehen.
 

Yaslaw

n/a
Moderator
Ganz ehrlich, ich habe deine Frage nicht richtig verstanden. Ich glaube jetzt mehr zu verstehen.

Nein, es braucht keine Änderung zu INNER JOIN, da books1 ja der Master ist. Da reicht ein WHERE auf die books1.aid
 

tvtotal

Erfahrenes Mitglied
Danke Dir. Ich habe das auch nicht gut erklärt. Ich habe u.a. vergessen zu schreiben, dass die Werte
IFNULL(books2.value1, books1.value1) as value1, IFNULL(books2.value2, books1.value2) as value2
nur bei gültigem Variablenwert, wie oben im Bsp. 234, ausgegeben werden sollen.

Es muss also "wahrscheinlich" (hab's gelesen) über ein Subquery geprüft werden, ob der Variablenwert übereinstimmt, um dann festzulegen, ob die Joins & IFNULL ausgeführt werden.

Hintergrund ist, dass eine Liste geladen werden soll, wovon aber nur 1 Element (das aktive ) viele Werte ( also DB-Felder ) braucht. Die anderen Elemente müssen vorhanden sein, brauchen aber aber nur wenige DB-Felder zur Darstellung. Der Rest kann Null sein.