Zitat von
Tyrael Y.:
Code:
SELECT * FROM MainTabelle
LEFT JOIN TabelleAllgemein ON MainTabelle.ID = TabelleAllgemein.ID
LEFT JOIN TabelleTyp1 ON MainTabelle.ID = TabelleTyp1.ID
WHERE TabelleAllgemein.ID = 1
SELECT * FROM MainTabelle
LEFT JOIN TabelleAllgemein ON MainTabelle.ID = TabelleAllgemein.ID
LEFT JOIN TabelleTyp2 ON MainTabelle.ID = TabelleTyp2.ID
WHERE TabelleAllgemein.ID = 2
SELECT * FROM MainTabelle
LEFT JOIN TabelleAllgemein ON MainTabelle.ID = TabelleAllgemein.ID
LEFT JOIN TabelleTyp3 ON MainTabelle.ID = TabelleTyp3.ID
WHERE TabelleAllgemein.ID = 3
Damit hast du doch alles. Geliefert werden aber nur Spalten aus deiner MainTabelle. Den Join auf TabelleTyp3 kannst du dir also sparen.
Und du joins die ID aus Maintabelle mit der ID aus TabelleAllgemein. Da frag ich mich erstmal, wie sieht denn dein PK in TabelleAllgemein aus? Und falls es eine 1:1 Beziehung darstellen soll (sprich ID ist auch PK in Tabelleallgemein), warum machst du denn überhaupt 2 Tabellen, und legst nicht einfach alle Spalten in eine.
Da TabelleTyp1-3 unterschiedlicher Struktur sind, macht ein Gesamtergebnis in einem Select in meinen Augen überhaupt keinen Sinn. Du vergleichst Äpfel mit Birnen, und versuchst beides in einen Korb zu schmeissen.
Zu deiner Normalisierung: Du entscheidest über Typ in deiner TabelleAllgemein, welche TypTabelle als Referenztabelle gewählt werden soll. Ich würds andersrum machen. Ich würde in jeder TypTabelle eine Referenz auf TabelleAllgemein setzen (also gerade umgekehrt). Somit kann dir nicht passieren, dass wenn einer die Typ Id in TabelleAllgemein ändert, du plötzlich auf eine andere Tabelle referenzierst. Das ist eine Riesengefahrenquelle, und die Homogenität deiner Daten ist nicht mehr gewährleistet.