我有这样的表:
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, 2013LEFT 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/