我已经看到了很多这方面的变化,但没有什么能与我想要完成的完全匹配.
我有一张表,TableA其中包含用户给出的可配置调查问卷的答案.列是member_id, quiz_num, question_num, answer_num.
不知何故,一些成员得到了两次提交的答案.所以我需要删除重复的记录,但要确保留下一行.
没有主列,因此可能有两行或三行都具有完全相同的数据.
是否有查询删除所有重复项?
我不是一个数据库人,我的大部分数据库工作都是MySQL,所以请原谅我,如果这个问题中的某些内容非常天真.
我需要从一个有大约1亿行的Oracle表中删除550万行.我有一个临时表中需要删除的行的ID.如果它只是几千行,我会这样做:
DELETE FROM table_name WHERE id IN (SELECT id FROM temp_table);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
有什么我需要注意和/或做的不同,因为它是550万行?我想做一个循环,这样的事情:
DECLARE
vCT NUMBER(38) := 0;
BEGIN
FOR t IN (SELECT id FROM temp_table) LOOP
DELETE FROM table_name WHERE id = t.id;
vCT := vCT + 1;
IF MOD(vCT,200000) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
Run Code Online (Sandbox Code Playgroud)
首先 - 这是做我认为的 - 一次批量提交20万次?假设它是,我仍然不确定生成550万个SQL语句,批量提交200,000,还是有一个SQL语句并一次提交所有更好.
想法?最佳做法?
编辑:我运行了第一个选项,单个删除语句,它只需要2个小时才能完成开发.基于此,它排队等待在生产中运行.