使用 select 查询的删除查询未按预期工作

Delete query with select query is not working as expected

我有 2 tables,I_786(10 万条记录)和 B_786(70 万条记录)。 I_786 table 所有记录必须从 B_786 table 中删除。这里 I table 是从 B table 派生的,通过使用 rownum 获取它的前 100k 条记录。之后我需要删除我 table 中的相同记录。 我创建了如下查询,

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

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

你应该使用一些你想从 table B_786 中删除记录的列,就像 table B_786 中有 2 个列(id name) 并有 700k 条记录,并且有 10 万条记录 I_786 列(id,名称)。因此,要删除 B_786 table 中与 I_786 table.

匹配的数据

Delete from B_786 where id in (select id from I_786);

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

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

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

假设 pid 作为 table I_786 中的引用键,fid 作为 B_786

中的引用键

您的查询将如下所示:

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