Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:如果表2中存在值,则使用表2中的值,而不是表1中的值_Mysql_Sql - Fatal编程技术网

MySQL:如果表2中存在值,则使用表2中的值,而不是表1中的值

MySQL:如果表2中存在值,则使用表2中的值,而不是表1中的值,mysql,sql,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

我有一个用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'
因此,当选择了一个日期并且该日期和计划id存在于
routenumer\u wijzigingen
表中时,它必须从
routenumer\u wijzigingen
表而不是
planning
表中获取routenumber。
如何实现这一点?

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

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=...

关于WHERE子句,你能给我介绍一下正确的方向吗?@JK87不需要在
WHERE
子句中更改任何内容。仅在
中选择
子句。我把我描述中的关键词弄错了。现在已更正。在case语句中,当routenumer_wijzigingen.routenumer不是NULL而不是
时,它不应该是
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=...