我有三个表,我试图在Eloquent中构建一个查询,以仅从第二个表中获取第三个表中不存在的行。
一个是表histories
,它引用其他两个表schedules
和templates
。如果有模板时间表历史记录,我不想获取该时间表。
通常,我希望可以在ID为LEFT JOIN
的第三张表上使用IS NULL
来完成此操作,但这在这种情况下不起作用。到目前为止,我尝试过的每个查询总是返回空列以及不想要的行。
这是有关模式和查询示例的小提琴:
http://sqlfiddle.com/#!2/28aad/5
如何构造查询以获得所需的结果?
最佳答案
select
schedules . *,
schedules.id as 'schedule_id',
histories . *,
histories.id as 'history_id'
from
schedules
left join
histories ON schedules.id = histories.schedule_id
and schedules.template_id = histories.template_id
where
histories.id IS NOT NULL
;
此列表列出了计划ID 1和2
select
schedules . *,
schedules.id as 'schedule_id',
histories . *,
histories.id as 'history_id'
from
schedules
left join
histories ON schedules.id = histories.schedule_id
and schedules.template_id = histories.template_id
where
histories.id IS NULL
;
该列表列出了计划ID 3,但与其他条件不匹配,例如
schedules.schedulable_id = 16
参见:http://sqlfiddle.com/#!2/28aad/21