如何删除子查询返回的所有记录?

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 不是唯一的(该表中也没有其他列是全局唯一的)

Gor*_*off 5

想必您想使用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值,则即使这样也不能保证有效(尽管可以轻松修改条件来处理此问题)。