我有两个表,table1和table2,结构如下
Table1:
ID Location Date
----------------------------
1 abc 2014-6-3
2 xyz 2013-6-5Table2:
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的概念还很陌生。
发布于 2014-08-07 18:34:20
您可以在cte中为新值指定别名,然后使用该别名更新值:
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;发布于 2014-08-07 18:55:57
即使没有CTE,你也可以这样做,如下所示:
UPDATE TABLE2 T2
SET
T2.DATE = (SELECT T1.DATE FROM TABLE1 T1 WHERE T1.LOCATION = T2.LOCATION)
WHERE T2.DATE IS NOT NULL发布于 2021-11-18 10:53:27
问题分析:只有当更新的记录影响一个基表时,使用公用表更新表达式才是可能的,而当Update语句影响多个基表时,这是不可能的。在上面的查询中,可以使用CTE执行更新操作。
解决方案:
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。
Update Table_2 t2
SET
t2.Date = (select t1.Date From Table_1 t1 Where t1.Location =
t2.Location)https://stackoverflow.com/questions/25180021
复制相似问题