Nar*_*Pal 65 sql t-sql sql-server sql-update
我有一个简单的表格结构如下:
表tempData
????????????????????
? NAME ? MARKS ?
????????????????????
? Narendra ? 80 ?
? Ravi ? 85 ?
? Sanjay ? 90 ?
????????????????????
Run Code Online (Sandbox Code Playgroud)
而且我还有另一个表名为tempDataView,就像这样
????????????????????
? NAME ? MARKS ?
????????????????????
? Narendra ? ?
? Narendra ? ?
? Narendra ? ?
? Narendra ? ?
? Ravi ? ?
? Ravi ? ?
? Sanjay ? ?
????????????????????
Run Code Online (Sandbox Code Playgroud)
我想更新表tempDataView,通过设置标志 根据tempDataView - 名称相比的TempData - 名称
是的,让我告诉你我尝试了什么,我试图用Cursor解决这个问题,并且它完美地解决了,但我找到了使用Subquery解决它的方法
这里是:
Declare @name varchar(50),@marks varchar(50)
Declare @cursorInsert CURSOR
set @cursorInsert = CURSOR FOR
Select name,marks from tempData
OPEN @cursorInsert
FETCH NEXT FROM @cursorInsert
into @name,@marks
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE tempDataView set marks = @marks where name = @name
FETCH NEXT FROM @cursorInsert
INTO @name,@marks
END
CLOSE @cursorInsert
DEALLOCATE @cursorInsert
Run Code Online (Sandbox Code Playgroud)
实际上,这就像我使用Subquery解决它的功课.
Joh*_*Woo 141
您甚至可以在UPDATE
声明中加入两个表格,
UPDATE a
SET a.marks = b.marks
FROM tempDataView a
INNER JOIN tempData b
ON a.Name = b.Name
Run Code Online (Sandbox Code Playgroud)
为了提高性能,请在两个表上定义一个INDEX
on列marks
.
运用 SUBQUERY
UPDATE tempDataView
SET marks =
(
SELECT marks
FROM tempData b
WHERE tempDataView.Name = b.Name
)
Run Code Online (Sandbox Code Playgroud)
cha*_*cha 29
因为你刚刚学习我建议你练习将SELECT连接转换为UPDATE或DELETE连接.首先,我建议您生成一个连接这两个表的SELECT语句:
SELECT *
FROM tempDataView a
INNER JOIN tempData b
ON a.Name = b.Name
Run Code Online (Sandbox Code Playgroud)
然后请注意我们有两个表别名a
和b
.使用这些别名,您可以轻松生成UPDATE语句以更新表a或b.对于表格a,您有JW提供的答案.如果要更新b
,语句将为:
UPDATE b
SET b.marks = a.marks
FROM tempDataView a
INNER JOIN tempData b
ON a.Name = b.Name
Run Code Online (Sandbox Code Playgroud)
现在,要将语句转换为DELETE语句,请使用相同的方法.以下语句将a
仅删除(保留b完整)那些按名称匹配的记录:
DELETE a
FROM tempDataView a
INNER JOIN tempData b
ON a.Name = b.Name
Run Code Online (Sandbox Code Playgroud)
您可以将JW创建的SQL Fiddle用作游乐场
小智 7
在我的示例中,我找到了解决方案,因为我在更新和子查询方面遇到了同样的问题:
UPDATE
A
SET
A.ValueToChange = B.NewValue
FROM
(
Select * From C
) B
Where
A.Id = B.Id
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
232846 次 |
最近记录: |