我有一个ID列表1,2,3,4,5,6,7,8,9
和一个MySQL表,如下所示;
mysql> describe tbl;
+-------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+-------+
| id | int(5) unsigned | NO | | 0 | |
+-------+-----------------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> select * from tbl;
+----+
| id |
+----+
| 1 |
| 4 |
| 8 |
+----+
2 rows in set (0.00 sec)
我想做的是从列表中找到表中不存在的 id。
我尝试了使用IN
和NOT IN
子句的不同方法,但无法获得所需的结果。
使用上面的例子,我需要2,3,5,6,7,9
结果,因为这些 id 在表中不存在。
附言ID列表是一个逗号分隔的字符串,我期待着使用单个查询来做到这一点。
提前感谢任何帮助。
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
10 rows in set (1.65 sec)
SELECT a.*
FROM
(SELECT 8 i UNION
SELECT 9 UNION
SELECT 10 UNION
SELECT 11 UNION
SELECT 12) a
LEFT
JOIN ints b
ON b.i = a.i
WHERE b.i IS NULL;
+----+
| i |
+----+
| 10 |
| 11 |
| 12 |
+----+
3 rows in set (0.06 sec)