sql - 更新表在不同行中具有两个具有相同值的不同列
问题描述
在这里,我的要求非常惊人,需要更新同一个表的列 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
解决方案
您可以尝试使用 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
推荐阅读
- garbage-collection - Young GC 清除老年代了吗?
- javascript - 在嵌套数组中搜索一个项目,如果找到则返回该对象,否则返回第一个可用对象
- flutter - Flutter:如何在单击编辑按钮时从列表数据中填充表单并保存?
- javascript - 在 MongDB 中推送嵌套对象
- reactjs - Firebase 默认托管域:只有 .firebaseapp.com 有效,但 .web.app 失败
- c++ - 模板类中的宏不像我预期的那样工作
- node.js - 如何在需要 dotenv 时修复“require(...).config(...) 不是函数”错误
- php - 保存后在 Laravel 中重定向页面
- python - 在 exec 函数中覆盖函数
- c# - 如何调用 async/await Winforms