[英]T-SQL Update Table From Select Flow
我想知道在没有 where 子句的情况下从 select 语句更新时如何执行 sql 。
例子:
表格1
+---------+-----------+
| Column1 | Column2 |
+---------+-----------+
| 3097 | Empty |
| 3097 | Empty |
+---------+-----------+
表 2
+---------+--------------------+
| Column1 | Column2 |
+---------+--------------------+
| 3097 | Camberwell |
| 3097 | Camberwell North |
+---------+--------------------+
Update a
Set a.column2 = b.column2
From Table1 a
Inner join Table2 b On a.Column1=b.Column1
这是否意味着它将使用 Camberwell North 更新所有行的 Column2 ?
编辑后:--
WITH X AS
(
SELECT * FROM
(
SELECT ROW_NUMBER() over (order by Column1) As myRowNumber1,Column2 AS Column2tbl1 FROM Table1
)a1
INNER JOIN
(
SELECT ROW_NUMBER() over (order by Column1) As myRowNumber2,Column2 AS Column2tbl2 FROM Table2
)b1
ON a1.myRowNumber1=b1.myRowNumber2
)
UPDATE X
set Column2tbl1=Column2tbl2
这可以使用 ROWNUMBER().......
在这里,我在两个表上执行 ROWNUMBER() 然后更新 Table1
我们可以实现......就像第 1 行表 1 与第 1 行表 2 匹配。更新到 Camberwell。 然后第 1 行表 1 匹配第 2 行表 2。
我刚试过这个,很惊讶我没有收到错误。 相反,正如您所假设的那样, Table1.Column2
已使用Table2
中第一行的结果进行了更新。
CREATE TABLE #test1 (Col1 int, Col2 varchar(10))
CREATE TABLE #test2 (Col1 int, Col2 varchar(10))
INSERT INTO #test1 (col1) Values (3097), (3097)
INSERT INTO #test2 (Col1, Col2) Values (3097, 'C1'), (3097, 'C2')
UPDATE #test1 SET Col2 = #test2.Col2
FROM #test1 INNER JOIN #test2 ON #test1.Col1=#test2.Col1
结果是:
SELECT * FROM #test1
Col1 Col2
3097 C1
3097 C1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.