甲骨文删除行的临时表基于行

问题描述:

我有一个表像这样:甲骨文删除行的临时表基于行

PermTable 
Col1 Primary Key 
Col2 Primary Key 
Col3 Primary Key 
Other rows 

我从文件加载数据到一个临时表与基本相同的结构PermTable:

TempTable 
Col1 Primary Key 
Col2 Primary Key 
Col3 Primary Key 
Other rows 

我想在PermTable中不存在不是Temptable任何行从PermTable

我使用的SQL删除是:

DELETE FROM PermTable WHERE NOT EXISTS 
    (SELECT NULL FROM TempTable 
    WHERE TempTable.Col1 = PermTable.Col1 
    AND TempTable.Col2 = PermTable.Col2 
    AND TempTable.Col3 = PermTable.Col3) 

这是行不通的。它正在删除超过它应该。

+2

您的表格定义应该提及* column *而不是* row *。另外一个有关数据的工作示例将帮助我们理解不应删除的内容。 – 2013-02-26 14:24:10

只截断PermTable并将所有临时记录插入到它中是不是更简单?

TRUNCATE TABLE PERMTABLE --removes所有记录 INSERT INTO PERMTABLE(SELECT * FROM不是Temptable)--the结构相同...

特别是因为你用临时表替换的permtable内容?

+0

我不能作为perm表是其他表的集合。每次加载临时表进行导入时,它只是perm表中数据的一个子集。 – 2013-02-26 14:36:30

+0

这个语句在你的问题中是有点误导性的:“我希望PermTable中任何不存在于TempTable中的行都从PermTable中删除”......这真的是你想要的吗?如果是这样,您将使用TempTable替换PermTable。我在想你的目标是不同的。 – 2013-02-27 13:14:32