如何选择数据库 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 选择另一个数据框中不存在的行?