我有一个记录ID列表,用于保留这些记录。删除不在集合中的所有记录的最佳方法是什么?我使用MySQL和ADO.NET与C#。我希望尽量缩短完成所有删除操作的时间。
答案 0 :(得分:1)
问题是你在哪里有这些ID?他们在另一张桌子上吗?它们在文件中吗?
如果你只有几个ID
DELETE FROM foo WHERE id NOT IN (1, 2, 7, 8, 10);
如果从表格中取出ID
DELETE foo.* FROM foo LEFT JOIN foo_bar ON foo.id = foo_bar.foo_id WHERE foo_bar.foo_id IS NULL;
如果你在文件中有id(每行一个id)
CREATE TEMPORARY TABLE foo_keep (id INT, PRIMARY KEY (id));
LOAD DATE INFILE '/tmp/myids.list' INTO foo_keep;
DELETE foo.* FROM foo LEFT JOIN foo_keep ON foo.id = foo_keep.id WHERE foo_keep.id IS NULL;