MySQL连接/子查询,其中结果由外部表的多个值过滤
我有两张桌子:MySQL连接/子查询,其中结果由外部表的多个值过滤,mysql,sql,database,date,join,Mysql,Sql,Database,Date,Join,我有两张桌子: 使用者 用户操作 用户操作表具有以下属性: 身份证 用户id 类型 时间戳 我有两种不同类型的动作: 打开的消息 收到的消息 现在我的问题是:我如何进行查询,以便获得上个月内打开邮件的所有用户,但排除最近2天内收到邮件的所有用户 我认为这可以通过某种形式的连接来实现,然后在子查询中使用WHERE NOT IN,但这听起来不是很有效,所以我想知道是否有更好的方法。我通常倾向于使用joins而不是EXIST/NOT EXIST子查询 下面是一种使用自左联接的方法: SEL
- 使用者
- 用户操作
- 身份证
- 用户id
- 类型
- 时间戳
- 打开的消息
- 收到的消息
我认为这可以通过某种形式的连接来实现,然后在子查询中使用WHERE NOT IN,但这听起来不是很有效,所以我想知道是否有更好的方法。我通常倾向于使用
join
s而不是EXIST
/NOT EXIST
子查询
下面是一种使用自左联接的方法:
SELECT DISTINCT
user_id
FROM
user_action ua
LEFT JOIN ua2
ON ua2.user_id = ua.userid
AND ua2.type = 'received message'
AND ua2.timestamp > CURRENT_TIMESTAMP() - INTERVAL 2 DAY
WHERE
ua.type = 'opened message'
AND ua.timestamp > CURRENT_TIMESTAMP() - INTERVAL 1 MONTH
AND ua2.user_id IS NULL
详情:
使用ua1
子句搜索上个月内打开过邮件的用户WHERE
option在过去两天内尝试查找同一用户收到的消息LEFT JOIN ua2
删除发生此类消息的记录(即其中。。。ua2.user_id为NULL
左连接成功的记录)
避免在给定用户上个月收到多条消息时重复输出行SELECT DISTINCT