Zum Inhalt springen

LEFT JOIN auf 2x gleiche Tabelle


FinalFantasy

Empfohlene Beiträge

Hi,

ich habe folgendes Problem:

Eine Tabelle a enthält 2 Referenzen auf Tabelle b, also muss ich b zweimal auf a joinen:


SELECT a.*, b1.*, b2.*
FROM a
LEFT JOIN b AS b1 ON a.b1id = b1.id
LEFT JOIN b AS b2 ON a.b2id = b2.id
[/PHP]

Als Ergebnis erhalte ich logischerweise eine Tabelle, die aber alle Spalten der Tabelle b doppelt enthält. Das ist ja auch so gewünscht, allerdings werte ich das Ergebnis in PHP aus und kann hier nichtmehr erkennen, welche Spalte von b1 stammt und welche von b2.

Gibt es eine Möglichkeit, allen Spaltennamen von einer Tabelle ein Prefix in den Spaltennamen zu schreiben, ohne jedes Feld beim SELECT aufführen zu müssen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

warum identifizierst Du sie nicht anhand der Reihenfolge in der die Spalten kommen?

Wenn Dir das zu umständlich ist, dann kannst Du ja immer noch zwei getrennte Selects ausführen. Sag aber nicht dass dir das nicht gefällt, immerhin bist Du auch zu Faul den Wildcard durch Spaltennamen zu ersetzen, was ja mancherorts eh nicht als guter Stil anerkannt ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Anhand der Reihenfolge identifizieren geht nicht, da man die Ergebnisse in PHP als assoziatives Array kriegt... kommt so ein Fall vor, dass zwei Spalten den selben Namen haben, kommt PHP damit schon nicht zurecht, weil man dann zwei Werte zum gleichen Key hat.

Die Wildcard durch jedes Feld austauschen will ich nicht, weil ich weiß, dass sich die Felder ändern können oder neue dazu kommen können.

In dem realen Code muss ich ausserdem 4 mal joinen, nicht zweimal, a 16 Spalten pro Tabelle.... naja... abgesehen vom Index brauche ich sowieso jede Spalte.

Hat also nichts mit Faulheit zu tun, sondern mit mangelnder Flexibilität.

Ich hab das jetzt erstmal mit einem View gelöst, in dem ich wirklich alle Spaltennamen angegeben habe (soviel zur Faulheit), so gibt es wenigstens nur eine Stelle an der man im Fall der Fälle ändern muss.

Aber es hätte ja sein können, dass es eine elegantere Lösung gibt, z.b. dass man Prefixe vergeben kann, oder sowas in der art.

Wie meinst du 2 Selects? Für jeden Eintrag in a nochmal einen Select auf b machen? Dann käme ich bei einer Abfrage auf.... viele Selects.

Falls du Subselects meinst, stellt sich das selbe Problem, dass ich jede Spalte aufführen muss, da ich sonst wieder die gleichen Spaltennamen mehrfach habe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Wildcard durch jedes Feld austauschen will ich nicht, weil ich weiß, dass sich die Felder ändern können oder neue dazu kommen können.

Also in dem Fall würde ich mir eine Art "Meta"Tabelle machen in der ich speichere welche Felder ich abfragen möchte - und daraus dann das SQL Statement vom Programm generieren und dabei Präfixe verwenden lassen.

Damit hast Du 1. die Hardcodierte Variante vermieden, 2. kein SELECT * und 3. bist immer noch flexibel :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...