根据温度 table 删除 table 的子集

Delete subset of a table based on temp table

我有一个table,说myTable。我还有一个临时 table,比如 myTableTemp,它包含我想要 keep eliminate 来自 myTablemyTable 的价值超出了我的需要)。

我最初想我可以删除 myTable,然后将 myTableTemp 重命名为 myTable`。然而,有许多我不想触及的 FK 约束。理论上,我的查询看起来像:

DELETE FROM myTable where in (myTableTemp);

至少逻辑上我是这么想的

编辑:临时 table 包含我想从 myTable

中删除的数据
DELETE FROM myTable where in (myTableTemp);

上面这不是倒过来了吗?您不想保留 myTableTemp 中的所有值吗?

我会做以下事情:

DELETE FROM myTable t1
 WHERE NOT EXISTS ( SELECT 1 FROM myTableTemp t2
                     WHERE t2.primary_key = t1.primary_key );

同样,假设您要保留 myTableTemp 中的所有内容并删除 myTable 中不在 myTableTemp.

中的所有内容

作为 myTableTemp 中存在的 myTable 项目中消除 的替代解决方案:

DELETE FROM myTable
 WHERE primary_key IN ( SELECT primary_key FROM myTableTemp )
;

通常认为 [NOT] EXISTS 查询的性能优于使用 [NOT] IN 的查询。但是it is not always that obvious.