我有一张桌子,说myTable
。我还有一个临时表,比如myTableTemp
,其中包含我希望<{>>保持 消除的确切值myTable
(myTable
比我需要的更有价值。
我最初认为我可以删除myTable,然后将myTableTemp
重命名为myTable。然而,我不想触及许多FK限制。理论上,我的查询看起来像:
DELETE FROM myTable where in (myTableTemp);
至少在逻辑上这就是我的想法
编辑:临时表包含我想从myTable
答案 0 :(得分:3)
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
内的所有内容。
答案 1 :(得分:1)
作为消除来自myTable
中myTableTemp
项目的替代解决方案:
DELETE FROM myTable
WHERE primary_key IN ( SELECT primary_key FROM myTableTemp )
;
通常认为[NOT] EXISTS
查询的效果优于使用[NOT] IN
的查询。但是it is not always that obvious。