SQL 使用来自另一列的自引用 ID 更新列

SQL UPDATE column with self referenced id from another column

我想更新非空的每一行的 ParentId

与具有 TemplateId 匹配 ParentId

的行中的 Id
Id ParentId TemplateID
1001 NULL 86
1002 86 41
1003 43 44
1004 NULL 43
1005 44 73

期望的结果:

Id ParentId TemplateID
1001 NULL 86
1002 1001 41
1003 1004 44
1004 NULL 43
1005 1003 73

我这样做的方式似乎非常复杂。有没有更简单的方法?

  UPDATE
    [dbo].[tbl]
  SET
    [ParentID] = [z].[ItemID]
  FROM
    [dbo].[tbl]
  JOIN (
    SELECT
      [x].[ParentID]
    FROM
      [dbo].[tbl]
    JOIN (
      SELECT DISTINCT
        [ParentID]
      FROM
        [dbo].[tbl]
      WHERE
        [ParentID] > 0
    ) [x]
    ON
      [dbo].[tbl].[TemplateID] = [x].[ParentID]
  ) [z]
  ON
    [dbo].[tbl].[ParentID] = [z].[ParentID]

这应该可以满足您的需求。自加入 ParentID = TemplateID


UPDATE t1
SET    ParentID = t2.ItemID
FROM   tbl t1
       INNER JOIN tbl t2 ON t1.ParentID = t2.TemplateID

dbfiddle demo