Sql синтаксическая ошибка при выполнении левого внешнего соединения в SQL - PullRequest
1 голос
/ 19 января 2020

Я использую oracle базу данных и пытаюсь удалить дубликаты записей из этого. Для того же самого я написал следующий запрос, но получил эту ошибку

SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"

Его красный индикатор под ключевым словом outer в Left outer join в запросе.

Запрос:

DELETE FROM Duplicate LEFT OUTER JOIN (

   SELECT MIN(RowId) as RWID, STUDENT_NAME, STUDENT_ROLLNO, STUDENT_SUBJECT
   FROM Duplicate 
   GROUP BY STUDENT_NAME, STUDENT_ROLLNO, STUDENT_SUBJECT

) as KeepRows ON
   Duplicate.RowId = KeepRows.RWID
WHERE  KeepRows.RWID IS NULL; 

Ответы [ 2 ]

3 голосов
/ 19 января 2020

Я могу предположить, что вы пытаетесь удалить дубликаты записей из таблицы Duplicate. Ваш синтаксис не выглядит правильным с точки зрения Oracle. Вы можете попробовать запрос ниже -

DELETE Duplicate D1
 WHERE D1.ROWID NOT IN (SELECT MIN(RowId)
                          FROM Duplicate
                         GROUP BY STUDENT_NAME, STUDENT_ROLLNO, STUDENT_SUBJECT)

1 голос
/ 19 января 2020

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...