MySQL-Join-Tabellen basierend auf Spaltendaten und Tabellennamen

9

Ich frage mich, ob das überhaupt möglich ist.

Ich möchte 2 Tabellen basierend auf den Daten von Tabelle 1 verknüpfen. Die Beispieltabelle 1 hat Spaltenfutter mit ihren Daten als "Hotdog".

Und ich habe eine Tabelle namens Hotdog.

Ist es möglich, ein JOIN wie zu machen.

%Vor%

Ich weiß, dass es nicht funktioniert, aber, es ist sogar möglich, gibt es eine Arbeit um?.

Vielen Dank im Voraus.

    
user1052347 17.11.2011, 17:29
quelle

2 Antworten

11

Nein, Sie können nicht zu einer anderen Tabelle pro Zeile in table1 wechseln, nicht einmal mit dynamischem SQL, wie es @Cade Roux vorschlägt.

Sie können sich der Tabelle " hotdog " für Zeilen anschließen, in denen das Essen "Hotdog" ist, und sich anderen Tabellen für andere spezifische Werte von Lebensmitteln anschließen.

%Vor%

Dies erfordert, dass Sie alle unterschiedlichen Werte von Lebensmitteln kennen, und dass alle entsprechenden Nahrungstabellen kompatible Spalten haben, so dass Sie sie zusammen verbinden können.

Was Sie tun, heißt polymorphe Assoziationen . Das heißt, der Fremdschlüssel in table1 referenziert Zeilen in mehreren "übergeordneten" Tabellen, abhängig vom Wert in einer anderen Spalte von table1 . Dies ist ein häufiger Konstruktionsfehler von relationalen Datenbankprogrammierern.

Für alternative Lösungen siehe meine Antworten auf:

Ich behandle auch Lösungen für polymorphe Assoziationen in meiner Präsentation und in meinem Buch SQL Antipatterns: Vermeiden Sie die Nachteile der Datenbankprogrammierung .

    
Bill Karwin 17.11.2011, 18:04
quelle
0

Nur mit dynamischem SQL. Es ist auch möglich, viele verschiedene Tabellen zu verknüpfen und CASE basierend auf dem Typ zu verwenden, aber die Tabellen müssen alle im Voraus bekannt sein.

Es wäre einfacher, ein geeignetes Design zu empfehlen, wenn wir mehr darüber wissen, was Sie erreichen möchten, wie Ihr Design derzeit aussieht und warum Sie dieses spezielle Tischdesign gewählt haben.

%Vor%

Normalerweise würde ich ein System zum Einschränken von nur einer Hilfstabelle empfehlen, aber aus Gründen der Einfachheit lasse ich das aus.

%Vor%

Nun werden Sie sehen, dass so etwas aus Code generiert werden kann (oder sogar für einen sehr langsamen dynamischen Prototyp-SQL) von SELECT DISTINCT foodtype FROM foods bei bestimmten Annahmen über Tabellennamen und Zugriff auf die Metadaten der Tabelle.

Das Problem ist, dass letztendlich derjenige, der das Ergebnis dieser Abfrage konsumiert, sich darüber im Klaren sein muss, dass bei jedem Hinzufügen einer neuen Tabelle neue Spalten angezeigt werden.

Also geht die Frage zurück zu Ihrem Kunden / Konsumenten der Daten - wie wird es mit den verschiedenen Typen umgehen? Und was bedeutet es, dass verschiedene Typen im selben Set sind? Und wenn es sich der verschiedenen Typen bewusst sein muss, was ist der Nachteil, wenn Sie einfach nur verschiedene Abfragen für jeden Typ schreiben oder eine manuelle Abfrage ändern, wenn neue Typen hinzugefügt werden, wenn die relative Auswirkung einer solchen Änderung trotzdem auftritt?

    
Cade Roux 17.11.2011 17:35
quelle