Hallo,
Ich versuche gerade Eine Abfrage von Werten in beliebigen Versionen über drei Tabellen zu gestalten.
Als PK dient jeweils die ID Spalte. Die Tabellen sehen wie folgt aus:
Tabelle 1: Versionen
Version_ID | Version | Value
1 | 1 | 24
2 | 1 | 10
3 | 1 | 20
4 | 1 | 30
5 | 2 | 40
6 | 3 | 50
7 | 1 | 60
Tabelle 2: Parameter
Konstante_ID | Konstante
1 | C1
2 | C2
3 | C3
4 | C4
Tabelle 3: Varianten
Variante_ID | Beschreibung
1 | Variante1
2 | Variante2
Da alle über eine N:M Beziehung miteinander verknüpft sind benötige ich eine Verknüpfungstabelle.
Tabelle 4: Verknuepfungstabelle
Konstante_ID | Version_ID | Variante_ID
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 4 | 1
1 | 1 | 2
2 | 2 | 2
3 | 7 | 2
4 | 4 | 2
2 | 5 | 1
2 | 6 | 1
Es sind zunächst einmal jeder Variante alle Konstanten zugeordnet und jede Konstante kann in unterschiedlichen Versionen vorliegen bei unterschiedlichen Varianten.
Die Abfrage soll nun Ein Ergebnis liefern das abhängig von der Variante für alle Konstanten die neuesten Version ausgibt, also im Prinzip eine Tabelle die folgendes ausgibt.
Ergebnistabelle für Variante 1:
Konstante_ID | Version_ID | Version | Value
1 | 1 | 1 | 24
2 | 6 | 3 | 50
3 | 3 | 1 | 20
4 | 4 | 1 | 30
Ergebnistabelle für Variante 2:
1 | 1 | 1 | 24
2 | 2 | 1 | 10
3 | 7 | 1 | 60
4 | 4 | 1 | 30
Mein Code:
SELECT Versionen.*,Konstante
FROM Versionen
INNERJOIN
Verknuepfungstabelle ON Verknuepfungstabelle.Version_ID = Versionen.Version_ID
INNERJOIN
Parameter ON Parameter.Konstante_ID = Verknuepfungstabelle.Konstante_ID
INNERJOIN
(SELECT Konstante_ID,MAX(Versionen.Version)AS High_Version
FROM Parameter ,Versionen
GROUPBY Konstante_ID)
b ON b.Konstante_ID = Parameter.Konstante_ID
AND b.High_Version = Versionen.Version
AND Variante_ID = 1
ORDERBY Parameter.Konstante_ID DESC
Der Code spuckt aber leider nur ein Wert in der höchsten Version aus oder alle Werte in allen Versionen. Je nachdem ob die erste AND Zeile auskommentiert ist oder nicht. Komme leider nicht weiter und hoffe Ihr könnt mir da weiter helfen.
Ich versuche gerade Eine Abfrage von Werten in beliebigen Versionen über drei Tabellen zu gestalten.
Als PK dient jeweils die ID Spalte. Die Tabellen sehen wie folgt aus:
Tabelle 1: Versionen
Version_ID | Version | Value
1 | 1 | 24
2 | 1 | 10
3 | 1 | 20
4 | 1 | 30
5 | 2 | 40
6 | 3 | 50
7 | 1 | 60
Tabelle 2: Parameter
Konstante_ID | Konstante
1 | C1
2 | C2
3 | C3
4 | C4
Tabelle 3: Varianten
Variante_ID | Beschreibung
1 | Variante1
2 | Variante2
Da alle über eine N:M Beziehung miteinander verknüpft sind benötige ich eine Verknüpfungstabelle.
Tabelle 4: Verknuepfungstabelle
Konstante_ID | Version_ID | Variante_ID
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 4 | 1
1 | 1 | 2
2 | 2 | 2
3 | 7 | 2
4 | 4 | 2
2 | 5 | 1
2 | 6 | 1
Es sind zunächst einmal jeder Variante alle Konstanten zugeordnet und jede Konstante kann in unterschiedlichen Versionen vorliegen bei unterschiedlichen Varianten.
Die Abfrage soll nun Ein Ergebnis liefern das abhängig von der Variante für alle Konstanten die neuesten Version ausgibt, also im Prinzip eine Tabelle die folgendes ausgibt.
Ergebnistabelle für Variante 1:
Konstante_ID | Version_ID | Version | Value
1 | 1 | 1 | 24
2 | 6 | 3 | 50
3 | 3 | 1 | 20
4 | 4 | 1 | 30
Ergebnistabelle für Variante 2:
1 | 1 | 1 | 24
2 | 2 | 1 | 10
3 | 7 | 1 | 60
4 | 4 | 1 | 30
Mein Code:
SELECT Versionen.*,Konstante
FROM Versionen
INNERJOIN
Verknuepfungstabelle ON Verknuepfungstabelle.Version_ID = Versionen.Version_ID
INNERJOIN
Parameter ON Parameter.Konstante_ID = Verknuepfungstabelle.Konstante_ID
INNERJOIN
(SELECT Konstante_ID,MAX(Versionen.Version)AS High_Version
FROM Parameter ,Versionen
GROUPBY Konstante_ID)
b ON b.Konstante_ID = Parameter.Konstante_ID
AND b.High_Version = Versionen.Version
AND Variante_ID = 1
ORDERBY Parameter.Konstante_ID DESC
Der Code spuckt aber leider nur ein Wert in der höchsten Version aus oder alle Werte in allen Versionen. Je nachdem ob die erste AND Zeile auskommentiert ist oder nicht. Komme leider nicht weiter und hoffe Ihr könnt mir da weiter helfen.
Comment