Oracle не разрешает JOIN
с в DELETE
запросах. Это ясно, если вы посмотрите на синтаксическую диаграмму для DELETE
в документации .
Существует много способов переписать это с помощью подзапроса в предложении WHERE
. Вероятно, самым безопасным является метод NOT IN
, предложенный Ankit, поскольку он работает, даже когда столбцы NULL
, а rowid
не может быть NULL
.
Я укажу, что для большого количества записей , может быть быстрее очистить таблицу и перезагрузить ее:
CREATE TABLE nodups as
SELECT d.*
FROM duplicates d
WHERE D.ROWID NOT IN (SELECT MIN(RowId)
FROM Duplicate
GROUP BY STUDENT_NAME, STUDENT_ROLLNO, STUDENT_SUBJECT);
TRUNCATE TABLE duplicates; -- backup first!
INSERT INTO duplicates
SELECT *
FROM nodups;