更新子查询的问题,与国外关键
-
19-08-2019 - |
题
我记错什么,关键是这个模板表,所以我加错字段作为外键。现在我需要添加外键,我想基于一个已经填充此领域的其他来填充它的价值。我开始尝试用一个UPDATE语句要做到这一点,但我不知道该怎么做。
我的架构的部分:
产品表:
ProductName (key)
TemplateName
TemplateID
...
我已经添加TemplateID,但它在它没有数据尚未和可为空。
模板表:
TemplateID (key)
TemplateName
...
我要使用的模板表中查找在产品表中的每个TEMPLATENAME匹配TemplateID和填充在产品表的外键引用。
我可以做到这一点,在更新一个子查询,或者我需要写一些类型的存储过程的?我使用的是SQL Server 2008中
解决方案
您可以用一个简单的UPDATE查询做到这一点。
UPDATE Products
SET Products.TemplateID = Templates.TemplateID
FROM Templates
WHERE Templates.TemplateName = Products.TemplateName
您不需要在指定产品表FROM子句,也不JOIN子句。 只要指定模板表在FROM子句中。 你可以使用你的表名的UPDATE子句中使用WHERE子句中,从两个表相关recordds。
其他提示
这里的一个加入溶液。这是显著中,只有匹配的行会被更新。
Update p
Set p.TemplateId = t.TemplateId
From Products p
join Templates t
On p.TemplateName = t.TemplateName
这里的子查询的解决方案。产品的每一行都将被更新,即使没有匹配。
Update p
Set p.TemplateId =
(
Select t.TemplateId
From Templates t
Where p.TemplateName = t.TemplateName
)
From Products p
update Templates
set TemplateId=Products.TemplateId
from Templates
inner join Products
on Templates.TemplateName=Products.TemplateName
不隶属于 StackOverflow