LEFT JOIN mit 3 Tabellen - MySQL 5.1
Hi!
Erstelle gerade eine Datenbank für interne Produkttests.
Man kann Produkte (Sitze) anlegen und mit verschiedenen Testkriterien/Parametern verknüpfen. Nach dem Test kann man die Ergebbnisse in die Datenbank eintragen.
3 Tabellen:
own
- ID_parameter
- ID_seat
parameter
- ID_parameter
- description
- ...
test
- ID_parameter
- ID_seat
- ID_vehicle
- test_result
- ...
zu jedem ID_seat gibt es genau einen Eintrag pro ID_parameter in `own`
zu jeder ID_seat & ID_vehicle kombi gibt es maximal einen eintrag mit ID_parameter in `test`
jetzt kann es aber vorkommen, dass in die Own-Tabelle neue Verknüpfungen eingetragen werden. Mein Ziel ist es nun alle vorhandenen test_results und alle neu verknüpften Parameter für eine bestimmte ID_Seat & Vehicle.
eigentlich dachte es geht mit:
das wird aber ein CROSS JOIN oder so...
Folgende Lösung funktioniert:
gibt es eine effizientere Lösung?
es ist eine MySQL 5.1 Datenbank.
sg Dirm
Erstelle gerade eine Datenbank für interne Produkttests.
Man kann Produkte (Sitze) anlegen und mit verschiedenen Testkriterien/Parametern verknüpfen. Nach dem Test kann man die Ergebbnisse in die Datenbank eintragen.
3 Tabellen:
own
- ID_parameter
- ID_seat
parameter
- ID_parameter
- description
- ...
test
- ID_parameter
- ID_seat
- ID_vehicle
- test_result
- ...
zu jedem ID_seat gibt es genau einen Eintrag pro ID_parameter in `own`
zu jeder ID_seat & ID_vehicle kombi gibt es maximal einen eintrag mit ID_parameter in `test`
jetzt kann es aber vorkommen, dass in die Own-Tabelle neue Verknüpfungen eingetragen werden. Mein Ziel ist es nun alle vorhandenen test_results und alle neu verknüpften Parameter für eine bestimmte ID_Seat & Vehicle.
eigentlich dachte es geht mit:
SELECT *
FROM (parameter LEFT JOIN own USING(ID_parameter)) LEFT JOIN test USING(ID_parameter)
WHERE (own.ID_seat = xx) or (test.ID_seat = xx AND test.ID_vehicle = yy)
Folgende Lösung funktioniert:
SELECT ID_parameter, ID_seat, description, `type`, max(test_result)
FROM (
(SELECT parameter.ID_parameter, ID_seat, description, `type`, NULL AS test_result
FROM parameter LEFT JOIN own USING (ID_parameter)
WHERE ID_seat = xx)
UNION
(SELECT parameter.ID_parameter, ID_seat, description, `type`, test_result
FROM parameter LEFT JOIN test USING (ID_parameter)
WHERE ID_seat = xx AND ID_vehicle = yy)
) AS derived_tab
GROUP BY ID_parameter
gibt es eine effizientere Lösung?
es ist eine MySQL 5.1 Datenbank.
sg Dirm
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 174292
Url: https://administrator.de/forum/left-join-mit-3-tabellen-mysql-5-1-174292.html
Ausgedruckt am: 07.04.2025 um 18:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo Dirm,
da in der own-Tabelle ja alle Verknüpfungen ID_parameter/ID_seat drin sind, brauchst Du zur own-Tabelle kein left join. Die Tabelle test muß dann nur noch über ID_seat mit own verknüpft werden und Du hast keinen cross join mehr:
Gruß, Mad Max
da in der own-Tabelle ja alle Verknüpfungen ID_parameter/ID_seat drin sind, brauchst Du zur own-Tabelle kein left join. Die Tabelle test muß dann nur noch über ID_seat mit own verknüpft werden und Du hast keinen cross join mehr:
SELECT *
FROM parameter
JOIN own on parameter.ID_parameter = own.ID_parameter
LEFT JOIN test on own.ID_parameter = test.ID_parameter and own.ID_seat = test.ID_seat and test.ID_vehicle = yy
WHERE own.ID_seat = xx
Gruß, Mad Max