mysql - SQL:选择一个表中不存在的键

标签 mysql sql select

我有一张表格,其中包含 auto inc. 的正常设置。身份证。一些行已被删除,因此 ID 列表可能如下所示:

(1, 2, 3, 5, 8, ...)

然后,从另一个来源(编辑:另一个来源 = 不在数据库中)我有这个数组:

(1, 3, 4, 5, 7, 8)

我正在寻找一个可以在数据库上使用的查询,以从我拥有的数组中获取表中不存在的 ID:s 列表。这将是:

(4, 7)

这样的存在吗?我现在的解决方案是创建一个临时表,以便命令“WHERE table.id IS NULL”起作用,或者可能更糟,使用 PHP 函数 array_diff 查看从表中检索所有 ID 后缺少的内容。

由于 ID 列表接近数百万或行,我急于找到最佳解决方案。

谢谢! /托马斯

编辑 2:

我的主要应用程序是一个相当简单的表格,其中填充了很多行。此应用程序是使用浏览器管理的,我使用 PHP 作为代码的解释器。

此表中的所有内容都将导出到另一个系统(第 3 方产品),除了手动使用该程序中的导入功能外,还没有其他方法可以执行此操作。也可以在其他系统中插入新行,尽管约定的路由永远不会这样做。

问题是我的系统不能 100% 确定用户从他/她按下“导出”键时所做的一切都是正确的。或者,在其他系统中从未创建过任何行。

我可以从其他系统中获取一个 CSV 文件,其中包含该系统的所有行。因此,通过比较 CSV 文件和我的表格,我可以查看是否: * 其他系统中缺少本应导入的任何行 * 如果有人在其他系统中创建了行

问题不是“解决它”。它是 is 的最佳解决方案,因为行中有太多数据。

再次感谢!

/托马斯

最佳答案

我们可以使用没有选项的MYSQL。

SELECT id
FROM table_one
WHERE id NOT IN ( SELECT id FROM table_two )

已编辑

如果您从 csv 文件中获取源代码,那么您只需将这些值直接放入,例如:

我假设 CSV 类似于 1,2,3,...,n

SELECT id
FROM table_one
WHERE id NOT IN ( 1,2,3,...,n );

编辑 2

或者如果您想选择其他方式,则可以使用 mysqlimport 将数据导入 MySQL 数据库中的临时表并检索结果并删除该表。

喜欢:

创建表

CREATE TABLE my_temp_table(
   ids INT,
);

加载 .csv 文件

LOAD DATA LOCAL INFILE 'yourIDs.csv' INTO TABLE my_temp_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(ids);

选择记录

SELECT ids FROM my_temp_table
WHERE ids NOT IN ( SELECT id FROM table_one )

丢表

DROP TABLE IF EXISTS my_temp_table

关于mysql - SQL:选择一个表中不存在的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6731797/

相关文章:

Mysql获取当前日期与时间 23 :59:59

mysql - 查询一半值

PHP MySQL : Select from same table multiple times without database load for each query?

C# 在一个字符串查询中插入并选择

mysql - 子查询在 group by 子句中返回多于 1 行 - MySQL

mysql - 需要分隔单词的字符时,如何在MySQL中进行模糊搜索?

mysql - 无法正确从两个表中选择记录

php - 修改注册后端Prestashop

sql - ActiveRecord 查找现有表索引

php - MySQL查询无法读取PHP变量