mysql - 问一下MySQL中的Query

标签 mysql sql select

我有这样的表:

CreateDate  |  UserID
2012-01-1   |     1
2012-01-10  |     2
2012-01-20  |     3
2012-02-2   |     4
2012-02-11  |     1
2012-02-22  |     2
2012-03-5   |     3
2012-03-13  |     4
2012-03-17  |     5

我需要查询以显示在 2013 年 2 月 1 日之后创建且在 2013 年 2 月 1 日之前不存在于数据库中的 UserID

从上面的例子来看,结果必须是:

CreateDate  |  UserID
2012-02-2   |     4
2012-03-13  |     4
2012-03-17  |     5

是否可以在没有存储过程的情况下仅在单个查询中解决?

最佳答案

您可以使用子查询单独获取 Feb 之前存在的 UserID。 2, 2013 然后使用 LEFT JOIN 将子查询的结果连接回表本身。

SELECT  a.*
FROM    tableName a
        LEFT JOIN 
        (
            SELECT  UserID
            FROM    tableName
            WHERE   CreateDate < '2013-02-01'
        ) b ON a.userID = b.userID
WHERE   a.CreateDate > '2013-02-01' AND
        b.userID IS NULL

为了更快的性能,在 userID 列上添加一个 INDEX

关于mysql - 问一下MySQL中的Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14954069/

相关文章:

sql - 用 ruby​​ on rails 模拟对称关系的最佳方法是什么?

php - 在查询 MySQL 中进行多个连接

mysql - 将表中的非空值合并到一个结果行

php - IP冲突mysql

MYSQL 复制一张表到另一张表并转换列

python - 使用 Python 对 MySql 数据库中的数字范围进行分类

c# - 如何使用 N 的参数从 C# 更新 MS Access 中的前 N ​​行?

SQL:使用计算字符串作为表名,连接select的所有行进行统计

Java MS SQL 在插入中选择

java - 无法使用 R 连接 MySQL