mysql - 使用mysql查询从给定数据中获取不可用的数据
问题描述
我需要查询:
例如:'1','2','9','10','3','4','5','6','7','8';
表名:getstdata
ID
1
2
3
4
5
5
7
询问:
select ID from getstdata where ID in('1','2','9','10','3','4','5','6','7','8')
结果:
'1','2','3','4','5','6','7'
在上述数据中 8,9,10 不在数据中。我需要那个不可用的数据。请给我解决方案。
谢谢
解决方案
Akina 的意思是从查询中创建一个临时表,因为您没有存储所有信息的现有表(我在评论中忽略的问题建议)。
所以你有一个表getstdata
,你想得到一个从 1 到 10 的数字范围的例子,它在 tableID
列中不存在,然后你制作一个临时表来存储 1 到 10 个数字的范围,如下所示:
SELECT 1 AS T UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION
SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10;
这会给你这个结果:
+-----+
| T |
+-----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+-----+
然后你把它作为一个子查询并像这样LEFT JOIN
对你的getstdata
表做一个:
SELECT * FROM
(SELECT 1 AS T UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION
SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) A
LEFT JOIN getstdata B ON A.T=B.ID;
这会给你这样的东西:
+-----+------+
| T | ID |
+-----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | NULL |
| 9 | NULL |
| 10 | NULL |
+-----+------+
在上面的结果中,NULL
值就是您要查找的值。因此,您可以将查询细化为如下所示:
SELECT A.T FROM
(SELECT 1 AS T UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION
SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) A
LEFT JOIN getstdata B ON A.T=B.ID
WHERE B.ID IS NULL;
这个最终结果:
+-----+
| T |
+-----+
| 8 |
| 9 |
| 10 |
+-----+
如您所见,这是解决当前问题的快速方法,但如果您进行的比较不是数字怎么办?如果数字范围从 1 到 1000 怎么办?你愿意写成SELECT 1 UNION SELECT 2 UNION ... all the way to ... SELECT 999 UNION SELECT 1000;
子查询吗?但是如果您使用的是 MariaDB 10.0.3 及更高版本,您可以使用它的内置序列引擎轻松制作一系列数字。
*一个使用序列引擎的快速 MariaDB 示例:
SELECT A.T FROM
(SELECT Seq AS T FROM seq_1_to_10) A
LEFT JOIN getstdata B ON A.T=B.ID
WHERE B.ID IS NULL;
不过,这只是比较数字的解决方案。在这里拉小提琴。
推荐阅读
- apache-kafka - Bug:无法更改 Changelog Kafka 主题的 segment.bytes
- php - PHP 类型注解、集合和 ArrayObject
- reactjs - 防止输入字段失去焦点
- node.js - 如何运行 kss 包?节点无法识别脚本
- java - JScrollPane - 防止顶部的可见组件移动
- laravel - 具有多个正文输入的 API 请求
- java - 如何在 Spark 中的每个执行程序之间生成不同的随机值?
- laravel - Laravel 6 Factory,使用状态后无法访问关系方法
- android - 当我在谷歌播放控制台更新应用程序时,如何设置更新类型“应用程序更新”?
- python - 如果字符串中的单词属于 pandas 中的单词列表,则替换它