我有三个表,我试图在Eloquent中构建一个查询,以仅从第二个表中获取第三个表中不存在的行。

一个是表histories,它引用其他两个表schedulestemplates。如果有模板时间表历史记录,我不想获取该时间表。

通常,我希望可以在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

10-07 19:10