MySQL-添加WHERE子句时LEFT JOIN失败

Ben*_*Ben 1 mysql join left-join

我有4张桌子,如下所示;SCHEDULESSCHEDULE_OVERRIDESCHEDULE_LOCATION_OVERRIDESLOCATION

我需要从所有表返回所有行,因此运行此查询可以正常工作,为不存在的任何值添加NULL值:

SELECT.....
FROM (schedule s LEFT JOIN schedule_override so ON so.schedule_id = s.id)
LEFT JOIN schedule_location_override slo ON slo.schedule_override_id = so.id
LEFT JOIN location l ON slo.location_id = l.id
ORDER BY s.id, so.id, slo.id, l.id
Run Code Online (Sandbox Code Playgroud)

然后,我需要在schedule_override end_date字段上限制结果。我的问题是,执行此操作后,将根本不返回SCHEDULE表的任何结果。即使不满足覆盖end_date条件,我也需要返回所有计划。

这是我正在使用的:

SELECT.....
FROM (schedule s LEFT JOIN schedule_override so ON so.schedule_id = s.id)
LEFT JOIN schedule_location_override slo ON slo.schedule_override_id = so.id
LEFT JOIN location l ON slo.location_id = l.id
WHERE so.end_date > '2011-01-30' OR so.end_date IS NULL
ORDER BY s.id, so.id, slo.id, l.id
Run Code Online (Sandbox Code Playgroud)

赞赏任何想法/意见。

最好的问候,本。

gra*_*rks 5

您是否尝试过将它放在ON条款中?

SELECT.....
FROM (schedule s LEFT JOIN schedule_override so ON so.schedule_id = s.id AND (so.end_date > '2011-01-30' OR so.end_date IS NULL))
LEFT JOIN schedule_location_override slo ON slo.schedule_override_id = so.id
LEFT JOIN location l ON slo.location_id = l.id
ORDER BY s.id, so.id, slo.id, l.id
Run Code Online (Sandbox Code Playgroud)