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
我想更新非空的每一行的 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