mysql - 搜索某一列中的 ID 列表并选择不存在的 ID

标签 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 在表中不存在。

附注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)

关于mysql - 搜索某一列中的 ID 列表并选择不存在的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50179232/

相关文章:

php - 将数据拆分为两个表

php - MySQL在关联表中引用第三个表进行计数

php - 如何从列表 MySQL 中删除特定数字

Android 在使用 ContextMenu 传递 ListView 中所选项目的 id 时出错

MySQL - 按分组结果分组

mysql - 最高行数

php - 摆脱 CodeIgniter URL 中的 Index.php

python - 迁移时 Django MySQL 错误

mysql - JPA |循环遍历 ids 列表并更新 C

mysql - 我如何在左连接中排序?