繁体   English   中英

MS SQL从另一个表中使用多个masterid和不同的childid更新一个表

[英]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比较table2masterid和相应的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

DEMO

如何以不同的方式实现这一目标?

样本数据

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM