搜索列中的ID列表,然后选择不存在的ID

时间:2018-05-04 16:15:29

标签: mysql

我有一个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。

我尝试过使用INNOT IN条款的不同方法,但无法获得所需的结果。

使用上面的示例,我需要将结果设为2,3,5,6,7,9,因为这些ID并不存在于表格中。

P.S。 ID列表是一个逗号分隔的字符串,我期待使用单个查询来完成它。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

    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)