根据温度 table 删除 table 的子集
Delete subset of a table based on temp table
我有一个table,说myTable
。我还有一个临时 table,比如 myTableTemp
,它包含我想要 keep eliminate 来自 myTable
(myTable
的价值超出了我的需要)。
我最初想我可以删除 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.
我有一个table,说myTable
。我还有一个临时 table,比如 myTableTemp
,它包含我想要 keep eliminate 来自 myTable
(myTable
的价值超出了我的需要)。
我最初想我可以删除 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.