mysql - 仅当被联接的表包含值时才执行 INNER JOIN

标签 mysql sql

我有以下查询,它从 profiles 表中获取 user_id,其中 profile.statuswip/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/

相关文章:

mysql - 如何在 mysql 数据库中编辑无效的 UTF-8 字符串

MySQL PXC Gcache 计算

php - 是否可以使用 Doctrine 2 扩展模型?

php - 报错?从 PHP 导入 .sql 文件并显示错误

php - 使用 AJAX + jQuery + PHP 将数据发送到 MySQL

java - 无法使用java更新mysql中的列值?

sql - 如何清理nodejs中的输入以防止sql注入(inject)?

php - 有没有办法将 php 中的值转发到第二页?

sql - 在SQL Server中创建枚举

sql聚合选择结果