JOIN, aber wie?

k3nguruh

Erfahrenes Mitglied
Hallo,

ich versuche mich gerade an einen JOIN. Irgend wie steige ich da aber nicht hinter. Vllt kann mir einer helfen.

Gegeben 2 Tabellen...

config_kfz_fahrzeug (a)
Code:
|  a.id  |  a.fahrzeug_id  |  a.fahrzeug_name  |  a.standort  |  ......  |  a.enddatum  |

config_kfz_besatzung (b)
Code:
|  b.id  |  b.fahrzeug_id  |  b.ef  |  b.ma  |  b.me  |  ......  |  b.beginndatum  |  b.enddatum  |

Ich versuche es mal in 2 SELECTs zu zeigen was ich meine:
Code:
SELECT * FROM config_kfz_fahrzeug WHERE standort = 'berlin' AND ( beginndatum <= CURDATE() AND (enddatum IS NULL OR enddatum > CURDATE()) )

SELECT * FROM config_kfz_besatzung WHERE fahrzeug_id = 'FAHRZEUG_ID_VON_OBEN' AND ( enddatum IS NULL OR enddatum >= CURDATE() )

Bei der "config_kfz_fahrzeug" kann es nur 1 Treffer je "fahrzeug_id" geben.
Bei der "config_kfz_besatzung" kann es zur "fahrzeug_id" NULL, 1 Treffer oder mehrere Treffer geben.

Es soll also auf jedenfall die Tabelle "config_kfz_fahrzeug" angezeigt werden...
Code:
|  a.fahrzeug_id  |  a.fahrzeug_name  |  b.ef  |  b.ma  |  b.me  |  b.beginndatum  |  b.enddatum  |
|  1              |  Fahrzeugname 1   |  x     |   x    |  x     |  2011-02-01     |  NULL        |
|  2              |  Fahrzeugname 2   |  x     |   x    |  x     |  2014-01-01     |  2014-02-01  |
|  2              |  Fahrzeugname 2   |  x     |   x    |  x     |  2014-02-01     |  NULL        |
|  3              |  Fahrzeugname 3   |  NULL  |   NULL |  NULL  |  NULL           |  NULL        |

Ich hoffe es kommt rüber was ich meine
 
Zuletzt bearbeitet:

Yaslaw

n/a
Moderator
SQL:
SELECT
    b.*
FROM
    config_kfz_fahrzeug AS f
    INNER JOIN config_kfz_besatzung AS b
        ON b.fahrzeug_id = a.fahrzeug_id
WHERE
    a.standort = 'berlin' 
    AND IFNULL(a.enddatum, CURDATE) = CURDATE() -- Eine andere Mögichkeit für dein WHERE
    AND NULLIF(b.enddatum, CURDATE) IS NULL     -- Noch eine andere Mögichkeit
 

k3nguruh

Erfahrenes Mitglied
Hallo,

ich habe dein Select noch nicht probiert... Hatte einen Fehler in meinem 1. Post und diesen jetzt geändert.

Bin ebend auf folgendes gestossen und es funktioniert...

SQL:
SELECT 
    cf.fahrzeugname, cf.funkname, cf.kennzeichen, cf.sitzplatz, cf.kostensatz, cb.beginndatum, cb.enddatum 
FROM 
    config_kfz_fahrzeug AS cf 
    LEFT JOIN config_kfz_besatzung AS cb ON 
    ( cf.fahrzeug = cb.fahrzeug ) 
WHERE 
    cf.standort = 'berlin' 
    AND 
    ( 
        ( cf.beginndatum <= CURDATE() 
            AND 
                ( cf.enddatum IS NULL OR cf.enddatum > CURDATE() ) 
        ) 
    ) 
    AND 
    (
        cb.enddatum is NULL OR cb.enddatum >= CURDATE() 
    ) 
ORDER BY 
    cf.fahrzeugname, cb.beginndatum ASC

Kannst du mal rüberschauen, ob das so richtig ist, oder ob noch was in ON reinkann / muss?
 
Zuletzt bearbeitet von einem Moderator: