我有一些服务器.他们中的一些人分配了ips.我想弄清楚有多少没有.显然有更多的服务器比分配的ips,但我的数据库告诉我没有分配ips的服务器...
我在这里结束了我的智慧.我的数据库是否以某种奇怪的方式被破坏了?
SELECT COUNT(*)
FROM server
Run Code Online (Sandbox Code Playgroud)
...的回报:
+----------+
| count(*) |
+----------+
| 23088 |
+----------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
这个:
SELECT COUNT(*)
FROM server
WHERE server_id IN (SELECT DISTINCT(server_id)
FROM ips)
Run Code Online (Sandbox Code Playgroud)
...的回报:
+----------+
| count(*) |
+----------+
| 13811 |
+----------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
这个:
SELECT COUNT(*)
FROM server
WHERE server_id NOT IN (SELECT DISTINCT(server_id)
FROM ips);
Run Code Online (Sandbox Code Playgroud)
...的回报:
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.02 sec)
Run Code Online (Sandbox Code Playgroud)
结果已被编辑以保护有罪,但你明白了.
Check table 在这两个表上都返回ok.编辑:谢谢您使用的建议LEFT JOIN.这肯定证实问题是MySQL错误.
mysql> SELECT count(s.server_id) FROM server s LEFT JOIN ips i on s.server_id = i.server_id WHERE i.server_id IS NULL;
+--------------------+
| count(s.server_id) |
+--------------------+
| 9277 |
+--------------------+
1 row in set (0.04 sec)
Run Code Online (Sandbox Code Playgroud)
由于9277 + 13811 = 23088,这意味着所有没有ips的服务器+所有带有ips的服务器确实==所有服务器.
我计划在下周开始升级mysql服务器.敬请关注.