如何更新同表中跨行匹配Title与ParentLinkTitle的ParentLinkID
如何根据关联标题更新临时表的ParentLinkID列?
你需要实现的是通过匹配不同行的ParentLinkTitle和Title,来更新ParentLinkID列。这是典型的自连接更新场景,下面是具体的解决方案:
基础表结构与数据
首先是你提供的临时表创建和插入数据的代码:
CREATE TABLE #temp ( LinkID INT, Title NVARCHAR(100), ParentLinkID INT, ParentLinkTitle NVARCHAR(100) ) INSERT INTO #temp ( LinkID , Title , ParentLinkID , ParentLinkTitle ) VALUES ( 1 , N'Dashboard' , 0 , N'Ecommerce' ), ( 2 , N'User' , 0 , N'' ), ( 3 , N'Ecommerce' , 0 , N'User' ), ( 4 , N'Shipping' , 0 , N'Business' ), ( 5 , N'Product' , 0 , N'Dashboard' ), ( 6 , N'Business' , 0 , N'Product' ); SELECT * FROM #temp;
执行后基础表的结果:
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
更新SQL语句
使用自连接的UPDATE语句来匹配并更新ParentLinkID:
UPDATE t1 SET t1.ParentLinkID = t2.LinkID FROM #temp t1 JOIN #temp t2 ON t1.ParentLinkTitle = t2.Title WHERE t1.ParentLinkTitle <> ''; -- 排除空的ParentLinkTitle行,保持原0值
验证更新结果
执行更新后,查询表数据:
SELECT * FROM #temp;
得到的结果与你期望的一致:
LinkID Title ParentLinkID ParentLinkTitle 1 Dashboard 3 Ecommerce 2 User 0 3 Ecommerce 2 User 4 Shipping 6 Business 5 Product 1 Dashboard 6 Business 5 Product
逻辑说明
- 我们将临时表
#temp分别作为t1(需要更新的行)和t2(匹配的父行)进行自连接 - 连接条件是
t1.ParentLinkTitle = t2.Title,找到每个行对应的父行 - 通过
WHERE t1.ParentLinkTitle <> ''过滤掉没有父标题的行(比如LinkID=2的行),避免其ParentLinkID被错误更新 - 最后将
t1的ParentLinkID设置为匹配到的t2的LinkID
内容的提问来源于stack exchange,提问作者Sameer
相关产品推荐
相关产品推荐

