daZ*_*Zza 3 sql oracle sql-delete
我想删除某个查询返回的所有记录,但我找不到正确的方法来执行此操作。但是,我尝试DELETE FROM mytable WHERE EXISTS (subquery)删除表中的所有记录,而不仅仅是子查询选择的记录。
我的子查询如下所示:
SELECT
MAX(columnA) as columnA,
-- 50 other columns
FROM myTable
GROUP BY
-- the 50 other columns above
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)
这应该很容易,但我的思绪现在被困住了。我很感谢任何建议。
编辑:columnA 不是唯一的(该表中也没有其他列是全局唯一的)
想必您想使用in:
DELETE FROM myTable
WHERE columnA IN (SELECT MAX(columnA) as columnA
FROM myTable
GROUP BY -- the 50 other columns above
HAVING count(*) > 1
);
Run Code Online (Sandbox Code Playgroud)
这假设在表中columnA是全局唯一的。否则的话,你就得更加努力一些。
DELETE FROM myTable t
WHERE EXISTS (SELECT 1
FROM (SELECT MAX(columnA) as columnA,
col1, col2, . . .
FROM myTable
GROUP BY -- the 50 other columns above
HAVING count(*) > 1
) t2
WHERE t.columnA = t2.columnA AND
t.col1 = t2.col1 AND
t.col2 = t2.col2 AND . . .
);
Run Code Online (Sandbox Code Playgroud)
而且,如果任何列具有NULL值,则即使这样也不能保证有效(尽管可以轻松修改条件来处理此问题)。