2017-08-17 7 views
1

が含まれている場合にのみ、INNER JOINを実行し、私は/ /はをキャンセルし、どこでそのuser_activity_log profile.statusWIPあるテーブルprofilesからuser_idを取得し、次のクエリ減少しています。 last_activity時間は1分以上前だった:接合されているテーブルに値

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

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 

しかし、これは私が今何をしたいのか、これを含める予想通りである作品

しかし、私はそのテーブルにuser_idが存在する場合にのみこの結合が行われるようにしたい(そうでない場合は、最初のクエリから結果を返します)。

どうすればよいですか?

感謝

+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 
       ) 
関連する問題