找不到匹配项时左加入

Left Join when looking for no matches

我有 3 个 tables,我很确定在加入第 3 个时我需要使用左连接,但是我认为前 2 个 tables 之间的连接只需要是一个定期加入,我不确定这是否需要某种嵌套。

所以前 2 tables(一旦我设置了条件)应该总是建立一对一的关系。然后我需要将其连接到第 3 个 table,但我需要知道是否没有匹配项(这意味着我需要在此处进行左连接)。基本上这就是我在此查询中需要知道的全部内容,实际上我想过滤 table 3 并且仅在它为 NULL 时显示。此外,我想看到(或缺少)的那些 NULL 响应有一个日期字段。我也只想看到 table 3.

中没有今天日期的记录

一天结束时,我想知道什么时候 table 3 中不存在 table 1/2 中主键的今天日期的记录(从第一个方式开始即使存在 primary/foreign 键关系,join 仍然有效,table 1 的主键在匹配 table 3.

时很重要

查询:

SELECT 
    subscribers.*, 
    check_times.* 
FROM subscribers, check_times 
LEFT JOIN checks 
    ON checks.subscriber_id = check_times.subscriber_id 
WHERE 
    subscribers.subscriber_id = check_times.subscriber_id 
    AND check_times.dow = 1 
    AND check_times.time <= '19:52' 
    AND checks.date = '2015-02-16' 
    AND checks.status IS NULL 

由于您在 WHERE 子句的 LEFT JOIN 中引用了 table,它变成了 INNER JOIN。您想要的是将它们置于 JOIN 状态。

SELECT 
    subscribers.*, 
    check_times.* 
FROM subscribers, 
INNER JOIN check_times
    ON subscribers.subscriber_id = check_times.subscriber_id
LEFT JOIN checks 
    ON checks.subscriber_id = check_times.subscriber_id 
    AND checks.date = '2015-02-16'
WHERE    
    check_times.dow = 1 
    AND check_times.time <= '19:52' 
    AND checks.status IS NULL 

此外,请不要使用旧式JOIN。阅读本文了解更多信息: