是的,您可以找到很多类似的问题,但是:
这里发布的最精美的解决方案适用于SQL Server,但不适用于Sybase(在我的情况下为Sybase Anywhere 11)。我什至发现一些与Sybase相关的问题被标记为SQL Server问题的重复项,这无济于事。
我喜欢但不起作用的解决方案的一个示例是WITH ... DELETE ...
构造。
我已经找到了使用游标或while循环的有效解决方案,但我希望没有循环也可以。
我希望有一个不错的,简单且快速的查询,只是删除除一个重复项外的所有重复项。
这里有一些测试框架:
IF OBJECT_ID( 'tempdb..#TestTable' ) IS NOT NULL
DROP TABLE #TestTable;
CREATE TABLE #TestTable (Column1 varchar(1), Column2 int);
INSERT INTO #TestTable VALUES ('A', 1);
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 2);
INSERT INTO #TestTable VALUES ('B', 1);
INSERT INTO #TestTable VALUES ('B', 2);
INSERT INTO #TestTable VALUES ('B', 2); -- duplicate
INSERT INTO #TestTable VALUES ('C', 1);
INSERT INTO #TestTable VALUES ('C', 2);
SELECT * FROM #TestTable ORDER BY Column1,Column2;
DELETE <your solution here>
SELECT * FROM #TestTable ORDER BY Column1,Column2;
最佳答案
如果所有字段都相同,则可以执行以下操作:
select distinct *
into #temp_table
from table_with_duplicates
delete table_with_duplicates
insert into table_with_duplicates select * from #temp_table
如果所有字段都不相同(例如,如果您具有不同的ID),则需要列出select语句中的所有字段,并在ID中硬编码一个值以使其相同(如果是)一个您不关心的领域。
例如:
insert #temp_table field1, field2, id select (field1, field2, 999)
from table_with_duplicates
关于sql - 当您没有唯一键时,如何删除sybase中的重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19544489/