我有两张桌子。表1是基本的"联系人"样式表与各种个人专栏。表1中的一个字段是引用表2的查阅列。我想要创建一个新列,或者使用表2中的实际查找值设置表1中的空列。执行此操作的最有效方法是什么在MSSQL中,处理时间(即大量行)最小化了吗?
答案 0 :(得分:1)
没有多少事实可供使用,但在添加新列后,您可以使用cte在该列中建立值。
ALTER TABLE table1
ADD newcol varchar(50);
WITH
cte AS (
SELECT
table1.id
, table1.newcol
, table2.name AS newcol_value
FROM table1
INNER JOIN table2 ON table1.table2_fk = table2.id
)
UPDATE cte
SET newcol = newcol_value
;
我的猜测是你希望这会改善某个地方的表现,但你现在需要维护这个新专栏,这会让你以其他方式付出代价。
nb:首先测试它,备份等等
答案 1 :(得分:0)
以下代码有效:
update dbo.MyContacts
set StateAbbreviation = S.StateAbbreviation
from dbo.MyContacts C
inner
join States S
on C.State = S.StateId
答案 2 :(得分:0)
正确的语法应该是:
update c
set StateAbbreviation = S.StateAbbreviation
from dbo.MyContacts C inner join
States S
on C.State = S.StateId;
请注意使用update
的别名。如果使用表名,则表中的所有行都将使用任意值进行更新,因为正在更新的表与FROM
子句中引用的表之间没有链接。