mySQL: Eindeutiger String aus verschiedenen Tabellen zusammengesetzt?

1 Antwort

Klar hier ist Join dein Freund. Besser gesagt Left oder Inner Join, um zu große Datenmengen zu vermeiden.

Ich kenne jetzt die Struktur und die verknüpften Felder nicht, aber es läuft nach dem Schema

SELECT
CASE T2.`wichtige_spalte`
WHEN "Inhalt für -ohne Index-" THEN CONCAT(T4.Eintrag, '_', T3.Eintrag, '_', T2.Eintrag, '_', T1.Eintrag)
ELSE CONCAT(T4.Eintrag, '_', T3.Eintrag, '_', T2.Eintrag, '_', T1.Eintrag, '_', T1.id)
END CASE AS `Wert`
FROM Tabelle1 AS T1
LEFT JOIN Tabelle2 AS T2 ON Tabelle2.ForeignKey=Tabelle1.Key
LEFT JOIN Tabelle3 AS T3 ON Tabelle3.ForeignKey=Tabelle1.Key
LEFT JOIN Tabelle4 AS T3 ON Tabelle4.ForeignKey=Tabelle1.Key
WHERE ...

T1.id ist der Primary Key, du kannst aber auch jeden Anderen nehmen , der als Index sinnvoll scheint. Das Join vergleicht den Inhalt der Spalten in den Tabellen und zieht die alles als Ergebnis zusammen. Das AS setzt einfach nur einen Alias, so dass du T1 statt Tabelle1 schreiben kannst, musst du aber nicht nehmen.

Kleine Ergänzung zum Unterschied LEFT JOIN UND JOIN:

Das LEFT oder RIGHT gibt an, welcher Datensatz gültig ist, wenn in einer Zeile 2 Spaltennamen aus verschiedenen Tabellen übereinstimmen.

Nimmst du also LEFT JOIN werden nur die Spalten aus Tabelle 2, 3 und 4 geholt, die es in der 1 noch nicht gibt. Bei RIGHT JOIN genau andersrum. Die Spalten aus Tabelle 1 werden durch die neuen Spalten überschrieben.