如何选择数据库 MySQL 中不存在的值

Posted

技术标签:

【中文标题】如何选择数据库 MySQL 中不存在的值【英文标题】:How to select values that do not exist in database MySQL 【发布时间】:2020-08-28 15:45:24 【问题描述】:

我想知道是否可以选择 mysql 数据库中不存在的值。

我当前的 SQL 是:

SELECT *
FROM (
    VALUES (1), (2)
) AS ids
WHERE 
    NOT EXISTS ( 
        SELECT *
        FROM data_table dt
        WHERE dt.id = ids.id
    );

当前 SQL 的问题是 ids.id 列不存在。 我已经检查过:

mysql 文档,其中说列可以作为 ids.column_0 访问,但失败了。 postgresql 文档显示它可以使用“as ids(id)”来完成,但这也失败了。想也许 MySQL 文档有一些不成文的文档。

如何获取数据库中不存在的id?

【问题讨论】:

MariaDb 允许您执行 SELECT seq FROM seq_0_to_99 之类的操作来获取整数序列。 mariadb.com/kb/en/sequence-storage-engine 【参考方案1】:

在 MySQL 中,您可以这样表述:

SELECT *
FROM (SELECT 1 id UNION ALL SELECT 2) AS ids
WHERE NOT EXISTS (SELECT 1 FROM data_table dt WHERE dt.id = ids.id);

最新版本支持VALUES ROW() 语法:

SELECT *
FROM (VALUES ROW(1), ROW(2)) as ids(id)
WHERE NOT EXISTS (SELECT 1 FROM data_table dt WHERE dt.id = ids.id);

【讨论】:

或者如果实际用例是大范围的数字,则使用递归 CTE,例如percona.com/blog/2020/02/13/…

以上是关于如何选择数据库 MySQL 中不存在的值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pyspark 2.1.0 选择另一个数据框中不存在的行?

如何不选择其他表中不存在的行

选择另一个表中不存在的值

SQL如何选择表中不存在的记录?

如何仅从 PostgreSQL 的内部联接中不存在 id 的表中选择行?

如何从表 A 中选择表 B 中不存在的记录 [重复]