使用 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;
我有 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;