Ben*_*Ben 1 mysql join left-join
我有4张桌子,如下所示;SCHEDULES,SCHEDULE_OVERRIDE,SCHEDULE_LOCATION_OVERRIDES和LOCATION
我需要从所有表返回所有行,因此运行此查询可以正常工作,为不存在的任何值添加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)
赞赏任何想法/意见。
最好的问候,本。
您是否尝试过将它放在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)