Axel Richter: falsches Ergebnis bei Mehrfach-Join

Beitrag lesen

Hallo,

Ich dachte ich join das ganze und kann dann mit ORDER BY die Darstellung beeinflussen. Wenn das nicht geht, gibt es aber vermutlich eine andere Lösung...

Ein JOIN über drei Tabellen ist hier aber nicht das Gewünschte. Statt einer Erklärung ein Beispiel:

Tabelle: Stammdaten
ID      Name
1       a
2       b
3       c
4       d

Tabelle: Anfragen
StdID   Anfrage
1       a1_1
1       a1_2
2       a2_1
2       a2_2
3       a3_1

Tabelle: Angebote
StdID   Angebot
1       agb1_1
1       agb1_2
2       agb2_1
3       agb3_1

Ein
SELECT Stammdaten.ID, Stammdaten.Name, Anfragen.Anfrage, Angebote.Angebot
FROM (Stammdaten
LEFT JOIN Anfragen ON Stammdaten.ID = Anfragen.StdID)
LEFT JOIN Angebote ON Stammdaten.ID = Angebote.StdID;
ergibt:
ID      Name    Anfrage  Angebot
1       a       a1_1     agb1_1
1       a       a1_1     agb1_2
1       a       a1_2     agb1_1
1       a       a1_2     agb1_2
2       b       a2_1     agb2_1
2       b       a2_2     agb2_1
3       c       a3_1     agb3_1
4       d

also alle Stammdaten, wenn möglich verbunden mit den entsprechenden Anfragen und nochmal, wenn möglich, verbunden mit den entsprechenden Angeboten.

Du willst eher
SELECT Stammdaten.ID, Stammdaten.Name, (select count(*) from Anfragen where ID=StdID) AS Anfragen, (select count(*) from Angebote where ID=StdID) AS Angebote
FROM Stammdaten;
ergibt:
ID      Name    Anfragen   Angebote
1       a       2          2
2       b       2          1
3       c       1          1
4       d       0          0

Wenn also Unterabfragen unterstützt werden, dann so, sonst mit zwei getrennten JOIN-SELECTs.

viele Grüße

Axel