首页 > 解决方案 > 同一 MySQL 查询的不同结果

问题描述

我有以下查询:

SELECT visitorIP
  FROM visitors
 WHERE visitDate BETWEEN '2018-08-18 00:00:00 ' AND '2018-08-19 20:32:03'    
 ORDER 
    BY visitDate DESC

这给了我 529 个项目(IP 地址)作为结果。我已将时间段分解为以下部分,这些部分与上述声明中使用的部分完全相同:

2018-08-18 00:00:00 ~ 2018-08-19 00:00:00 and 
 2018-08-19 00:00:00 ~ 2018-08-19 20:32:03

并使用相同的 SQL 语句查询它们,第一个得到 544 个结果,第二个得到 36 个结果!令人惊讶的是,他们的总和根本不是 529(大于实际结果!!!)。

我该如何解决?

标签: mysql

解决方案


DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(my_int INT NOT NULL);

INSERT INTO my_table VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9);

SELECT * FROM my_table WHERE my_int BETWEEN 2 AND 8;
+--------+
| my_int |
+--------+
|      2 |
|      3 |
|      4 |
|      5 |
|      6 |
|      7 |
|      8 |
+--------+
7 rows in set (0.00 sec)

SELECT * FROM my_table WHERE my_int BETWEEN 2 AND 4
UNION ALL
SELECT * FROM my_table WHERE my_int BETWEEN 4 AND 8;    
+--------+
| my_int |
+--------+
|      2 |
|      3 |
|      4 |
|      4 |
|      5 |
|      6 |
|      7 |
|      8 |
+--------+
8 rows in set (0.00 sec)

推荐阅读