奇怪的问题,我知道。我不想删除所有行并重新开始,但我们有一个开发数据库表,其中一些行具有重复的ID,但值不同。
我想删除所有ID重复的记录,因此我可以在表上强制新版本和构建关系的数据完整性。目前它是由代码(遗留)插入和生成的ID。
从另一个问题我得到了这个:
delete
t1
from
tTable t1, tTable t2
where
t1.locationName = t2.locationName and
t1.id > t2.id
但这不起作用,因为ID是相同的!
如何删除除ID之外的所有记录?也就是说,删除具有相同ID的记录的数量> 1?如果那是不可能的,那么删除所有ID重复的记录就可以了。
答案 0 :(得分:1)
取决于您的数据库服务器,但您可以关联DELETE和LIMIT(mysql)或TOP(sql server)。
您还可以将每个记录的第一个(不是重复的)移动到临时表,删除原始表并将临时表复制回原始表。
答案 1 :(得分:1)
在SQL Server 2005
及以上:
WITH q AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY locationName ORDER BY id) rn
FROM tTable
)
DELETE
FROM q
WHERE rn > 1
答案 2 :(得分:1)
对于mysql不确定,但对于MSServer数据库,您可以使用以下
SET IDENTITY_INSERT [tablename] ON
SELECT DISTINCT col1, col2, col3 INTO temp_[tablename] FROM [tablename]
ALTER TABLE temp_[tablename] ADD IDcol INT IDENTITY
TRUNCATE TABLE [tablename]
INSERT INTO [tablename](IDcol, col1, col2, col3) SELECT IDcol, col1, col2, col3 FROM temp_[tablename]
DROP TABLE temp_[tablename]
希望这有帮助。