在寻找没有比赛时离开加入

时间:2015-02-17 00:41:14

标签: mysql join left-join

我有3张桌子,我很确定在加入第3张桌子时我需要使用左连接但是前2张桌子之间的连接我认为只需要是常规连接而且我不确定是否需要需要某种嵌套与否。

所以前两个表(一旦我设定了我的条件)应该总是达到1比1的关系。然后我需要将它加入第3个表,但我需要知道是否没有匹配(这意味着我需要在这里进行左连接)。基本上我在这个查询中需要知道的所有内容实际上都希望过滤表3并且只显示它是否为NULL。此外,我想看到(或缺少)的NULL响应有一个日期字段。我还想看到表3中今天的日期没有记录。

在一天结束时,我想知道表3中是否存在表3中主键的当前日期的记录(因为即使有主要/外国的第一次加入的方式也是如此关键关系,表1的主键在表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 

1 个答案:

答案 0 :(得分:0)

由于您引用了LEFT JOIN条款WHERE中的表格,因此它变为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。请阅读此内容以获取更多信息: