0

我有一张桌子Datawarehouse,人口出错了。每一行都有一个name和一个ID,对于原始系统中的每次更新,都会在DWH表中创建一个新行,该行应该保持与受影响对象相同的IDName

出于某种原因,IDs为同一个对象生成了重复项(相同的名称,知道名称也是唯一的对象而不是表,与 ID 相同,它不是表主键,它只是一个对象 ID)。

知道我有以下字段:ID, Name, IsLatest, 我现在需要做的是修复数据。为此,我需要使用的伪代码是:

 1. Select the list of rows with the same Name
 2. Select the ID where IsLatest = 1
 3. Update the rest of rows with that ID

我的更新查询有问题,我不能只选择一个ID,我也不能循环使用不同的名称。

4

2 回答 2

3

这可以使用相关的子查询来完成:

UPDATE DWH
SET id = (
    SELECT id
    FROM DataWarehouse
    WHERE DWH.name = name
        AND isLatest = 1
    )
FROM DataWarehouse DWH
于 2012-10-01T10:53:20.327 回答
1

在临时表中选择最新的并将其用于更新。

UPDATE YourTable
SET YourTable.ID = LatestTable.ID
FROM 
(
    SELECT * FROM YourTable 
    WHERE IsLatest = 1
) AS LatestTable
WHERE YourTable.[Name] = LatestTable.[Name]
于 2012-10-01T10:44:50.537 回答