MySQL:当表2中存在时,使用表2中的值而不是表1

时间:2015-02-03 13:19:49

标签: mysql sql

我有一个用PHP和MySQL编写的传输规划器, 要每天获取任务规则,我使用以下查询:

SELECT  planning.*,     
        planning_dagen.planning_id, 
        planning_dagen.dagen,
        planning_dagen.data_import,
        routenummer_wijzigingen.routenummer AS temp_routenummer
FROM planning 
LEFT JOIN planning_dagen
USING (planning_id)
LEFT JOIN routenummer_wijzigingen
USING (planning_id)
WHERE :datum >= planning.datum
AND :datum <= geldig_tot
AND (frequentie = 'dagelijks' AND dayofweek(:datum) = planning_dagen.dagen
OR (frequentie = 'eenmalig' AND date(:datum) = planning.datum)
OR (frequentie = 'wekelijks' AND 0 = (abs(datediff(:datum, planning.datum)) % 7))
OR (frequentie = 'twee-wekelijks' AND 0 = (abs(datediff(:datum, planning.datum)) % 14))
OR (frequentie = 'maandelijks'
AND ceil(dayofmonth(:datum)/7) = ceil(dayofmonth(planning.datum)/7)
AND dayofweek(:datum) = dayofweek(planning.datum)))
AND dayofweek(:datum) <> '1'
AND dayofweek(:datum) <> '7'

planning表中有一个名为routenummer(routenumber)的列,它在大多数情况下使用(标准routenumber)。 但正如你所看到的,我还有一个routenummer_wijzigingen表,用于在某一天为任务提供不同的路径。

例如,我有一个任务,每周二和周三返回并且有10个路由器。但是在周二2015-02-03我需要通过路由器9完成此任务。 所以我在routenummer_wijzigingen表中插入一条规则,其中包含以下列:

routenummer_wijzigingen_id
planning_id
routenummer
datum

因此,当选择日期并且routenummer_wijzigingen表中存在date和planning_id时,它必须从routenummer_wijzigingen表而不是planning表中获取routenumber。 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

您应该使用routenummer_wijzigingen表(包括datum)修改连接条件。然后,您应该在CASE子句中使用SELECT来决定选择哪个routenummer

SELECT  planning.*,     
    planning_dagen.planning_id, 
    planning_dagen.dagen,
    planning_dagen.data_import,
    CASE
        WHEN routenummer_wijzigingen.routenummer is not NULL
            THEN routenummer_wijzigingen.routenummer
        ELSE planning.routenummer
    END AS temp_routenummer
FROM planning
...
LEFT JOIN routenummer_wijzigingen rw on 
    planning.planning_id=rw.planning_id and rw.datum=...