[英]Different results on same MySQL query
我有以下查询:
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(大于实际结果!!!)。
我该如何解决?
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)
如上所述,这个问题只能根据您提供的内容进行推测。 也就是说,这里有一个简单的方法来调试像这样的头屑出现时:
SELECT visitorIP
FROM visitors
WHERE visitDate BETWEEN '2018-08-18 00:00:00' AND '2018-08-19 20:32:03'
AND visitorIP NOT IN (
# query 1
UNION ALL
# query 2
)
ORDER
BY visitDate DESC
如果第一个查询中的结果没有显示两个子查询,这将揭示它们是什么,从那里您应该能够确定逻辑中发生错误的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.