我有一张正常设置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)
| 归档时间: |
|
| 查看次数: |
24953 次 |
| 最近记录: |