我有一个表,它有一个唯一的非聚集索引,其中4个列在此索引中列出。 我想要更新表中大量的行。 如果我这样做,它们将不再是唯一的,因此由于索引,更新会失败。
我想禁用索引,然后删除最旧的重复行。 这是我的查询:
SELECT t.itemid, t.fieldid, t.version, updated
FROM dbo.VersionedFields w
inner JOIN
(
SELECT itemid, fieldid, version, COUNT(*) AS QTY
FROM dbo.VersionedFields
GROUP BY itemid, fieldid, version
HAVING COUNT(*) > 1
) t
on w.itemid = t.itemid and w.fieldid = t.fieldid and w.version = t.version
内连接中的选择返回了我们想要删除的记录的正确数量,但将它们分组后实际上有两倍的数量。
连接后显示了所有记录,但我只想删除最旧的记录?
如何做到这一点?