gpt4 book ai didi

mysql - 2 个 SQL 查询的奇怪结果

转载 作者:可可西里 更新时间:2023-11-01 08:59:24 24 4
gpt4 key购买 nike

查询#1:

SELECT SUM(size) 
FROM RepoSize s
LEFT JOIN VirtualRepo v ON s.repo_id = v.repo_id
WHERE v.repo_id IS NULL;

+----------------+
| SUM(size) |
+----------------+
| 61550890457198 |
+----------------+
1 row in set (0.32 sec)

查询#2:

SELECT SUM(size) 
FROM RepoSize
WHERE repo_id NOT IN (SELECT repo_id FROM VirtualRepo);

+----------------+
| SUM(size) |
+----------------+
| 61551148262106 |
+----------------+
1 row in set (0.45 sec)

我以为这两个 SQL 查询会返回相同的结果,但事实是第二个值比第一个大,repo_id 是两个表中的主键。

表结构:

mysql> desc RepoSize;
+---------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| repo_id | char(37) | NO | PRI | NULL | |
| size | bigint(20) unsigned | YES | | NULL | |
| head_id | char(41) | YES | | NULL | |
+---------+---------------------+------+-----+---------+-------+

mysql> desc VirtualRepo;
+-------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| repo_id | char(36) | NO | PRI | NULL | |
| origin_repo | char(36) | YES | MUL | NULL | |
| path | text | YES | | NULL | |
| base_commit | char(40) | YES | | NULL | |
+-------------+----------+------+-----+---------+-------+

最佳答案

由于 repo_id 是两个表中的主键,因此不会因为字段中的空值而出现差异。所以理想情况下,除非数据在执行之间发生变化,否则两个查询都应该给出相同的结果。因此,差异很可能是因为两者之间的数据发生了变化。

关于mysql - 2 个 SQL 查询的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49569535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com