同一mysql查询的不同结果

u3r8eeie  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(177)

我有以下疑问:

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(比实际结果大!!!)完全。
我该怎么修?

cczfrluj

cczfrluj1#

如上所述,这个问题只能引起猜测鉴于你所提供的。这就是说,这里有一个简单的方法来调试出现这样的抓头程序:

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

如果第一个查询中的结果没有显示这两个子查询的结果,这将显示它们是什么,并且从中您应该能够确定逻辑中的错误发生在哪里。

6yt4nkrj

6yt4nkrj2#

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)

相关问题