[英]MS SQL Update one table from another table with multiple masterid and different childid
我正在寻找一种最佳方法来从另一个具有共同多个id的表中更新1个表。
以下是场景
表格1:
+----------+---------+
| masterid | childid |
+----------+---------+
| 1 | NULL |
+----------+---------+
| 1 | NULL |
+----------+---------+
| 1 | NULL |
+----------+---------+
| 2 | NULL |
+----------+---------+
| 2 | NULL |
+----------+---------+
| 1 | NULL |
+----------+---------+
表2:
+----------+---------+
| masterid | childid |
+----------+---------+
| 1 | 2 |
+----------+---------+
| 1 | 3 |
+----------+---------+
| 1 | 4 |
+----------+---------+
| 2 | 9 |
+----------+---------+
| 2 | 8 |
+----------+---------+
| 1 | 5 |
+----------+---------+
我希望更新table1
比较table2
的masterid
和相应的childid
应该更新。
解决方案1:使用ROW_NUMBER()
;
WITH cte
AS (SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) rn
FROM @t1),
cte1
AS (SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) rn
FROM @t2)
UPDATE t1
SET t1.childid = t2.childid
FROM cte AS t1
INNER JOIN cte1 AS t2
ON t2.masterid = t1.masterid
AND t2.rn = t1.rn
如何以不同的方式实现这一目标?
样本数据
DECLARE @TAble1 AS TABLE (masterid INT , childid INT)
INSERT INTO @Table1
SELECT 1 , NULL UNION ALL
SELECT 1 , NULL UNION ALL
SELECT 1 , NULL UNION ALL
SELECT 2 , NULL UNION ALL
SELECT 2 , NULL UNION ALL
SELECT 1 , NULL
DECLARE @TAble2 AS TABLE (masterid INT , childid INT)
INSERT INTO @TAble2
SELECT 1, 2UNION ALL
SELECT 1, 3UNION ALL
SELECT 1, 4UNION ALL
SELECT 2, 9UNION ALL
SELECT 2, 8UNION ALL
SELECT 1, 5
此更新状态足以更新表Table1无需使用任何窗口功能
SELECT * FROM @TAble1
UPDATE T1
SET T1.childid = T2.childid
FROM @TAble1 T1
INNER JOIN @TAble2 T2
ON T1.masterid = T2.masterid
SELECT * FROM @TAble1
更新前的结果
masterid childid
1 NULL
1 NULL
1 NULL
2 NULL
2 NULL
1 NULL
更新后的结果
masterid childid
1 2
1 2
1 2
2 9
2 9
1 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.