2017-08-17 48 views
1

我有以下查询后者从表profilesuser_id其中profile.statusWIP /拒绝/取消并在他们的user_activity_log。 last_activity时间超过1分钟前:执行INNER JOIN只有被连接的表中包含的值

SELECT t1.user_id 
FROM profiles t1 
INNER JOIN user_activity_log t2 
    ON t1.user_id = t2.user_id 
WHERE t1.status IN ('wip','declined','cancelled') 
    AND t2.last_activity < NOW() - INTERVAL 1 MINUTE 

可正常工作但是我想现在要做的是包括这样的:

INNER JOIN email_logs t3 
    ON t1.user_id = t3.user_id AND t3.sent_datetime < NOW() - INTERVAL 1 MINUTE 

但是我只希望在该表中存在user_idemail_logs),否则返回初始查询的结果。

我该怎么做?

非常感谢

+0

为什么不直接使用一个'左外join'? – Psi

回答

1

你可以用NOT EXISTS做到这一点,但在稍子查询的变化情况:

SELECT p.user_id 
FROM profiles p INNER JOIN 
    user_activity_log ual 
    ON p.user_id = ual.user_id 
WHERE p.status IN ('wip', 'declined', 'cancelled') AND 
     ual.last_activity < NOW() - INTERVAL 1 MINUTE AND 
     NOT EXISTS (SELECT 1 
        FROM email_logs el 
        WHERE p.user_id = el.user_id AND 
         el.sent_datetime >= NOW() - INTERVAL 1 MINUTE 
       )