我有以下查询,它从 profiles
表中获取 user_id
,其中 profile.status 是 wip/declined/已取消并且他们的user_activity_log.last_activity时间超过 1 分钟前:
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
但我只希望在该表 (email_logs
) 中存在 user_id
时发生此连接,否则返回初始查询的结果。
我该怎么做?
非常感谢
最佳答案
您可以使用 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
)
关于mysql - 仅当被联接的表包含值时才执行 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45733071/