簡體   English   中英

MySQL:為什么這些查詢返回不同的結果?

[英]MySQL: Why do these queries return different results?

查詢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排序...

查詢1 :如果日期之間至少存在一條記錄,則檢索整個桌布。

查詢2 :僅檢索日期之間的記錄。

在這里閱讀EXISTS工作原理。

您的第二個查詢使用BETWEEN返回第一個條目為'1989-08-04'和下一個條目為'1991-08-04'條目,然后按timestamp_lastonline DESC 請注意,這實際上是返回具有這兩個值的兩個條目之間的條目,而不是每個年份都在1989年至1991年之間的條目(除非您手動將它們按時間順序編入索引!)。 我很想看看您認為您的第一個查詢會返回什么,因為如果BETWEEN子句返回一行,它將獲得timestamp_lastonline排序的表中的每個條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM