MySQL:为什么这些查询会返回不同的结果?

时间:2012-06-18 08:15:07

标签: mysql sql database select

查询1:

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 ...

排序的列表

2 个答案:

答案 0 :(得分:9)

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

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

阅读here了解EXISTS的工作原理。

答案 1 :(得分:1)

您的第二个查询使用BETWEEN返回第一个条目'1989-08-04'与下一条'1991-08-04'之间的每个条目,然后按timestamp_lastonline DESC对这些条目进行排序。请注意,这实际上是使用这两个值返回两个条目之间的条目,而不是每个具有1989年到1991年之间的年份的条目(除非您手动命令这些条目按时间顺序编号!)。我很有兴趣看到你认为你的第一个查询返回的内容,因为如果有一行BETWEEN子句返回,它将获得timestamp_lastonline所排序的表中的每个条目。