【发布时间】:2014-11-20 21:49:25
【问题描述】:
如果Table2 的行数少于Table1,用Table2 中的所有值更新Table1 的最佳方法是什么?考虑到Table2 没有可以加入Table1 进行更新的密钥。
TABLE1 TABLE2 RESULT TABLE1
id value value id value
----------------------------------------------------
1 NULL 4 1 4
2 NULL 6 2 6
3 NULL 8 3 8
4 NULL 4 4
5 NULL 5 6
6 NULL 6 8
7 NULL 7 4
希望我说得通。
提前致谢。
编辑:对不起,没有指定它的 Microsoft SQL Server 2012。:/
解决方案示例:
DECLARE @t1 TABLE(id int, avalue int)
DECLARE @t2 TABLE(id INT, avalue int)
-- Generate 20 rows in @t1 table
INSERT
INTO @t1 (id)
SELECT Number
FROM dbo.Numbers
WHERE Number BETWEEN 1 AND 20
-- Generate 5 rows and value @t2 table
INSERT
INTO @t2 (id,avalue)
SELECT Number,
Number
FROM dbo.Numbers
WHERE Number BETWEEN 1 AND 5
-- The goal is to take all rows from @t2
-- and repeatively insert them in order into @t1
UPDATE t1
SET t1.avalue = t2.avalue
FROM @t1 t1
JOIN ( SELECT t2.*, COUNT(*) OVER () AS cnt
FROM @t2 t2
) AS t2
ON (t1.id - 1) % t2.cnt = t2.id - 1;
SELECT *
FROM @t1
【问题讨论】:
-
“希望我说得通”不是真的。
-
该死,也许我应该改进问题。 ://
-
这是有道理的——他想用第二个表中的
value列依次填充第一个表中的value列,一遍又一遍。例如:4、6、8、4、6、8等 -
是的,不好的例子。 Table2 也有 id,1-3。
-
@marc_s 这只是一个意见。除此之外,这里不相关。问题是两个表之间没有关系。 Siyual 似乎在他的理解中是正确的。
标签: sql sql-server sql-server-2012