mysql - 当不在另一个表中时从一个表中选择用户

标签 mysql sql anti-join

我有一个从一个表中选择用户注册日期的查询。

SELECT DATE(registered)
FROM users
WHERE user_id= ".$currentUser."
ORDER BY registered ASC
LIMIT 1

我需要通过加入另一个表来修改原始查询,以确保用户不存在于第二个表(“访问”)中,其中成员 ID 低于特定值且访问日期低于特定日期。

LEFT JOIN access ON (users.user_id = access.user_id)
WHERE access.user_id < 500
AND access.date ... after March 1, 2012

不确定如何将这两者放在一起。

最佳答案

您可以使用相关子查询,例如:

  SELECT DATE(u.registered)
    FROM users u
   WHERE u.user_id = ".$currentUser."

     AND NOT EXISTS (
             SELECT 1 
               FROM access a 
              WHERE u.user_id = a.user_id
                AND a.user_id < 500
                AND a.date > DATE '2012-03-01')

ORDER BY registered ASC 
LIMIT 1;

一些注意事项:
即使 access 表中没有匹配的行,您仍然会返回一行。
您可能知道这一点...ASC 是默认的排序顺序,因此您无需输入它。

关于mysql - 当不在另一个表中时从一个表中选择用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9552441/

相关文章:

apache-spark - 在连接中广播左表

mysql - Rails 应用程序错误 - ActiveRecord::PendingMigrationError 迁移正在挂起;运行 'rake db:migrate RAILS_ENV=development' 解决此问题

java - 表示 RDBMS 中另一个日期之前或之后一定天数的日期

python - 在 Python 中从字符串中提取数字

MYSQL一对多关系查询从 'many'表返回一行

sql - 需要sql中一个结果集的多个副本而不使用循环

database - Postgres ANTI-JOIN 需要表扫描?

python - 反加入 Pandas

mysql - 将文本文件转换为 MySQL 数据库

mysql - MySQL 不支持外部应用