更新表具有两个不同的列,在不同的行

时间:2018-05-29 06:35:15

标签: sql sql-server tsql sql-update

在这里,我的要求非常惊人,需要更新同一个表的列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

3 个答案:

答案 0 :(得分:2)

您可以尝试自我加入与左加入和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

答案 1 :(得分:1)

UPDATE tmp

SET ParentLinkID = tmp1.LinkID
FROM temp  tmp
INNER JOIN temp as tmp1 ON tmp1.Title = tmp.ParentLinkTitle;

检查http://sqlfiddle.com/#!18/58be7/5

答案 2 :(得分:1)

您可以在没有任何加入的情况下执行此操作,如下所示:

update temp 
set ParentLinkID = isnull((select LinkID from temp t2 where t2.Title = temp.ParentLinkTitle),0)