0

查询一:

SELECT * 
FROM user_d1 
WHERE EXISTS (SELECT 1 
              FROM `user_d1` 
              WHERE birthdate BETWEEN '1989-08-04' AND '1991-08-04') 
ORDER BY timestamp_lastonline DESC 
LIMIT 20

查询 2:

SELECT * 
FROM user_d1 
WHERE birthdate BETWEEN '1989-08-04' AND '1991-08-04' 
ORDER BY timestamp_lastonline DESC 
LIMIT 20

我真的不明白:为什么查询 2返回错误的结果?它返回一个列表,首先按顺序排列birthdate,然后按timestamp_lastonline...

4

2 回答 2

9

查询 1:如果日期之间至少存在一条记录,则检索整个 talbe。

查询 2:仅检索日期之间的记录。

阅读此处了解其EXISTS工作原理。

于 2012-06-18T08:20:47.163 回答
1

您的第二个查询使用 BETWEEN 返回第一个条目与'1989-08-04'下一个条目之间的每个条目'1991-08-04',然后按顺序对这些条目进行排序timestamp_lastonline DESC。请注意,这实际上是返回具有这两个值的两个条目之间的条目,而不是在 1989 年到 1991 年之间的每个条目(除非您手动订购这些条目以按时间顺序编制索引!)。我很想看看您认为您的第一个查询返回什么,因为timestamp_lastonline如果有 BETWEEN 子句返回的行,它将获取表中的每个条目排序。

于 2012-06-18T08:21:54.150 回答