找不到匹配项时左加入
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
。阅读本文了解更多信息:
我有 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
。阅读本文了解更多信息: