Sql 在 SQL 中进行左外连接时出现语法错误

Sql syntax error while doing left outer Join in SQL

我正在使用 oracle 数据库并尝试从中删除重复记录。 同样,我写了一个下面的查询但是得到了这个错误

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

它在 Left outer join 查询中的 outer 关键字下给出红色指示符。

查询:

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; 

我可以猜测您正试图从 Duplicate table 中删除重复记录。从 Oracle 的角度来看,您的语法似乎不正确。您可以尝试以下查询 -

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

Oracle 不允许在 DELETE 查询中使用 JOINs。如果您查看 documentation.

DELETE 的语法图,这一点就很清楚了

有很多方法可以使用 WHERE 子句中的子查询来重写它。最安全的可能是 Ankit 提出的 NOT IN 方法,因为即使列为 NULLrowid 不能为 NULL.

,它也能正常工作

我会指出,对于大量记录,清空 table 并重新加载它会更快:

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;