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

Tho*_*mas 12 mysql sql select

我有一张正常设置auto inc的桌子.IDS.某些行已被删除,因此ID列表可能如下所示:

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

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

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

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

(4,7)

这样的存在吗?我现在的解决方案是要么创建一个临时表,所以命令"WHERE table.id IS NULL"工作,或者可能更糟,使用PHP函数array_diff查看从表中检索所有id后丢失的内容.

由于id列表正在接近数百万或行,我渴望找到最佳解决方案.

谢谢!/托马斯

编辑2:

我的主要应用程序是一个相当简单的表,其中包含很多行.这个应用程序是使用浏览器管理的,我使用PHP作为代码的解释器.

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

问题是我的系统无法100%确定用户在按下"导出"键时所做的一切都是正确的.或者,在其他系统中没有创建任何行.

从另一个系统我可以得到一个CSV文件,其中包含系统所有的行.因此,通过比较CSV文件和我的表,我可以看到:*其他系统中是否有任何行应该导入*如果有人在其他系统中创建了行

问题不是"解决它".它是最好的解决方案,因为行中有太多数据.

再次感谢!

/托马斯

Tal*_*han 20

我们可以选择使用MYSQL.

SELECT id
FROM table_one
WHERE id NOT IN ( SELECT id FROM table_two )
Run Code Online (Sandbox Code Playgroud)

编辑

如果从csv文件获取源代码,则只需将这些值直接放入:

我假设CSV像1,2,3,...,n

SELECT id
FROM table_one
WHERE id NOT IN ( 1,2,3,...,n );
Run Code Online (Sandbox Code Playgroud)

编辑2

或者如果要选择其他方法,则可以使用mysqlimport在MySQL数据库的临时表中导入数据并检索结果并删除表.

喜欢:

创建表格

CREATE TABLE my_temp_table(
   ids INT,
);
Run Code Online (Sandbox Code Playgroud)

加载.csv文件

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

选择记录

SELECT ids FROM my_temp_table
WHERE ids NOT IN ( SELECT id FROM table_one )
Run Code Online (Sandbox Code Playgroud)

掉桌子

DROP TABLE IF EXISTS my_temp_table
Run Code Online (Sandbox Code Playgroud)