首页 > 解决方案 > 更新表在不同行中具有两个具有相同值的不同列

问题描述

在这里,我的要求非常惊人,需要更新同一个表的列 ParentLinkID = LinkID,其中 Title 等于 ParentLinkTitle。注意:Title 和 ParentLinkTitle 位于不同的行中。如此处所述,如何更新 ParentLinkID?

CREATE TABLE #temp
(
LinkID INT,
Title NVARCHAR(100),
ParentLinkID INT,
ParentLinkTitle NVARCHAR(100)
)

INSERT INTO #temp
        ( LinkID ,
          Title ,
          ParentLinkID ,
          ParentLinkTitle
        )
VALUES  ( 1 , -- LinkID - int
          N'Dashboard' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'Ecommerce'  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 2 , -- LinkID - int
          N'User' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N''  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 3 , -- LinkID - int
          N'Ecommerce' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'User'  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 4 , -- LinkID - int
          N'Shipping' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'Business'  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 5 , -- LinkID - int
          N'Product' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'Dashboard'  -- ParentLinkTitle - nvarchar(100)
        ),
        ( 6 , -- LinkID - int
          N'Business' , -- Title - nvarchar(100)
          0 , -- ParentLinkID - int
          N'Product'  -- ParentLinkTitle - nvarchar(100)
        );

SELECT * FROM #temp

--Base Table
LinkID  Title       ParentLinkID    ParentLinkTitle
1       Dashboard   0               Ecommerce
2       User        0   
3       Ecommerce   0               User
4       Shipping    0               Business
5       Product     0               Dashboard
6       Business    0               Product

需要在#temp 表的列 ParentLinkID 上方更新,如下输出:

--OUTPUT
LinkID  LinkTitle          IsActive ParentLinkID    ParentLinkTitle
1       Dashboard           1       3               Ecommerce
2       User        1       0       0
3       Ecommerce           1       2               User
4       Shipping            1       6               Business
5       Product             1       1               Dashboard
6       Business            1       5               Product

标签: sqlsql-servertsqlsql-update

解决方案


您可以尝试使用 Left JOIN 进行自我加入coalesce,并检查t2.LINKID是否存在null

UPDATE t1
SET t1.ParentLinkID = coalesce(t2.LINKID,0)
FROM temp t1 LEFT JOIN temp t2
ON t1.ParentLinkTitle = t2.Title

sqlfiddle


推荐阅读