2017-08-17 55 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 
       )