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
查询中使用 JOIN
s。如果您查看 documentation.
中 DELETE
的语法图,这一点就很清楚了
有很多方法可以使用 WHERE
子句中的子查询来重写它。最安全的可能是 Ankit 提出的 NOT IN
方法,因为即使列为 NULL
且 rowid
不能为 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;
我正在使用 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
查询中使用 JOIN
s。如果您查看 documentation.
DELETE
的语法图,这一点就很清楚了
有很多方法可以使用 WHERE
子句中的子查询来重写它。最安全的可能是 Ankit 提出的 NOT IN
方法,因为即使列为 NULL
且 rowid
不能为 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;