在这里,我的要求非常惊人,需要更新同一个表的列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
答案 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
答案 1 :(得分:1)
UPDATE tmp
SET ParentLinkID = tmp1.LinkID
FROM temp tmp
INNER JOIN temp as tmp1 ON tmp1.Title = tmp.ParentLinkTitle;
答案 2 :(得分:1)
您可以在没有任何加入的情况下执行此操作,如下所示:
update temp
set ParentLinkID = isnull((select LinkID from temp t2 where t2.Title = temp.ParentLinkTitle),0)