使用选择查询删除查询无法正常工作

时间:2020-06-27 05:52:32

标签: where-clause oracle12c sql-delete

我有2个表,I_786(100k条记录)和B_786(700k条记录)。 I_786表中的所有记录必须从B_786表中删除。在这里,I表是从B表派生的,方法是使用rownum记录前100k条记录。之后,我需要删除I表中的相同记录。 我创建了如下查询,

DELETE FROM B_786 
WHERE  EXISTS (SELECT * 
               FROM   I_786); 

但是它正在删除B_786表中的所有数据。在这里条件不起作用。 如何在此处优化where子句?

3 个答案:

答案 0 :(得分:1)

您应该使用一些列,从该列中删除表B_786中的记录,例如表B_786中有2列(id名称)并且有700k条记录,并且有 100k用列(id,name)记录I_786。因此,要从与I_786表匹配的记录的B_786表中删除数据。

从B_786的ID中删除(从I_786中选择ID);

通过执行上述命令,数据将从与I_786的ID匹配的B_786中删除。

答案 1 :(得分:1)

DELETE FROM B_786 
WHERE  EXISTS (SELECT 1 FROM   I_786 where I_786.id = B_786.id); 

答案 2 :(得分:1)

在这种情况下,您需要使用引用键,即一个表中的字段引用另一个表中的PRIMARY KEY。

假设pid是表I_786中的引用键,而fid是B_786中的引用键

您的查询将如下所示:

DELETE FROM B_786 WHERE B_786.fid IN (SELECT I_786.pid FROM I_786) as temp;