MySQL bedingter JOIN aus zwei Tabellen

xppx

Active member
ID: 123719
L
23 April 2007
25
2
Hallo,

ich habe folgendes Problem, es sollen 3 Tabellen miteinander verbindet werden. Jedoch muss für das GKonto je nach Buchungskreis der Passende Text aus Tabelle Buchungskonten oder Debitoren ausgegeben werden.

Tabelle Buchungen
ID, Buchkreis, Konto_id, GKonto_id
1, 0, 1, 2
2, V, 1, 2
3, V, 1, 1
4, 0, 1, 1

Tabelle Buchungskonten
ID, Text
1, Bank
2, Aufwendungen

Tabelle Debitoren
ID, Name
1, Müller
2, Schulz

Da je nach Buchungskreis entweder der jeweilige Debitor oder das Buchungskonto ausgegeben wird hatte ich mir die abfrage so gedacht. Jedoch scheint das mit CONCAT() leider nicht zu funktionieren.

PHP:
SELECT * FROM Buchungen
left join Buchungskonten AS kto ON Buchungen.Konto_id = kto.ID
left join Buchungskonten AS gkto ON Buchungen.GKonto_id = gkto.ID AND CONCAT(0, Buchungen.Buchkreis)

left join Debitoren AS Deb ON Buchungen.GKonto_id = Deb.ID AND CONCAT('V', Buchungen.Buchkreis)

Hat jemand eine Idee, wie man einen JOIN Bedingt ausführen kann?
 
Zuletzt bearbeitet:
ich weiss jetzt nicht, ob ich das Problem richtig verstanden habe:

Du hast eine Tabelle namens Buchungen.
Steht dort in der Spalte Buchkreis ein 0, dann soll der Text von der Tabelle Buchungskonten ermittelt werden, dessen ID dem Wert der Spalte Konto_id entspricht.
Steht dagegen in der Spalte Buchkreis der Wert V, dann soll statt dessen der Text der Tabelle Debitoren ermittelt werden, dessen ID dem Wert der Spalte GKonto_id entspricht.

Habe ich das Problem so richtig beschrieben ?
 
Möglichkeit 1:

Code:
SELECT *
FROM Buchungen a LEFT JOIN Buchungskonten b
ON a.Konto_id = b.ID
WHERE a.Buchkreis = '0'

UNION ALL

SELECT *
FROM Buchungen a LEFT JOIN Debitoren b
ON a.GKonto_id = b.ID
WHERE a.Buchkreis = 'V'


oder

Code:
SELECT a.* , CASE WHEN Buchkreis = '0' THEN b.Text ELSE c.Name END AS Text 
FROM Buchungen a 
LEFT JOIN Buchungskonten b
   ON a.Konto_id = b.ID
LEFT JOIN Debitoren c
   ON a.GKonto_id = c.ID