首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于更新列的SQL Server CTE

用于更新列的SQL Server CTE
EN

Stack Overflow用户
提问于 2014-08-07 18:23:00
回答 3查看 1.8K关注 0票数 0

我有两个表,table1和table2,结构如下

Table1:

代码语言:javascript
复制
ID    Location     Date
----------------------------    
 1      abc        2014-6-3
 2      xyz        2013-6-5

Table2:

代码语言:javascript
复制
ID Location    Date
----------------------    
1    abc       NULL
2    xyz       NULL
3    hgf       2012-9-8

我需要编写一个CTE来根据条件where table1.location = table2.location使用来自table1.Date列的值来更新Table2.Date

有人能帮我一下吗?因为我对CTE的概念还很陌生。

EN

回答 3

Stack Overflow用户

发布于 2014-08-07 18:34:20

您可以在cte中为新值指定别名,然后使用该别名更新值:

代码语言:javascript
复制
WITH cte AS
(
    SELECT
     t2.Date
    ,t1.Date AS NewDate
    FROM #Table1 t1
    JOIN #Table2 t2
    ON t1.Location=t2.Location
)
UPDATE cte
SET Date=NewDate;
票数 1
EN

Stack Overflow用户

发布于 2014-08-07 18:55:57

即使没有CTE,你也可以这样做,如下所示:

代码语言:javascript
复制
UPDATE TABLE2 T2
SET 
T2.DATE = (SELECT T1.DATE FROM TABLE1 T1 WHERE T1.LOCATION = T2.LOCATION)
WHERE T2.DATE IS NOT NULL
票数 0
EN

Stack Overflow用户

发布于 2021-11-18 10:53:27

问题分析:只有当更新的记录影响一个基表时,使用公用表更新表达式才是可能的,而当Update语句影响多个基表时,这是不可能的。在上面的查询中,可以使用CTE执行更新操作。

解决方案:

代码语言:javascript
复制
With Data(t2Date,t2Location,t1Date,t1Location)
as
  (
   Select t2.Date,t2.Location,t1.Date,t1.Location 
   from Table_2 t2 
   Join Table_1 t1 ON t1.Location = t2.Location
  )

Update Data
SET t2Date = t1Date where t1Location = t2Location

输出将是

替代解决方案:我们也可以通过普通的SQL查询提供解决方案,而不使用CTE。

代码语言:javascript
复制
Update Table_2 t2
SET 
t2.Date = (select t1.Date From Table_1 t1 Where t1.Location = 
t2.Location)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25180021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档