使用联接在SQL中执行更新
我正在使用SQL Server 2008,并尝试在management studio中运行以下查询:使用联接在SQL中执行更新,sql,join,sql-update,Sql,Join,Sql Update,我正在使用SQL Server 2008,并尝试在management studio中运行以下查询: UPDATE Table1 as T1 INNER JOIN Table2 as T2 ON T1.ID=T2.ID SET T1.SomeValue = T2.SomeValue GO 但是不起作用。这类事情是否得到支持 卡尔 [编辑] 让我更清楚一点,我不想做这样的事情: UPDATE Tab
UPDATE
Table1 as T1 INNER JOIN Table2 as T2 ON T1.ID=T2.ID
SET T1.SomeValue = T2.SomeValue
GO
但是不起作用。这类事情是否得到支持
卡尔
[编辑]
让我更清楚一点,我不想做这样的事情:
UPDATE
Table1 as T1 INNER JOIN Table2 as T2 ON T1.ID=T2.ID
SET T1.SomeValue = T2.SomeValue
T1.SomeValue2 = T2.SomeValue2
T1.SomeValue3 = T2.SomeValue3
T1.SomeValue4 = T2.SomeValue4
GO
i、 e.不必显式执行T1.SomeValue=SELECT…,T2.SomeValue=SELECT…如果您将其重写为类似于以下内容,则它应该可以工作:
UPDATE Table1
SET Table1.SomeValue = T2.SomeValue
FROM Table2 AS T2
WHERE Table1.ID = T2.ID
如果您将其改写为类似以下内容,则应能正常工作:
UPDATE Table1
SET Table1.SomeValue = T2.SomeValue
FROM Table2 AS T2
WHERE Table1.ID = T2.ID
试试这个
DECLARE @Table1 TABLE(
ID INT,
Val VARCHAR(MAX)
)
DECLARE @Table2 TABLE(
ID INT,
Val VARCHAR(MAX)
)
INSERT INTO @Table1 (ID,Val) SELECT 1, ''
INSERT INTO @Table1 (ID,Val) SELECT 2, ''
INSERT INTO @Table1 (ID,Val) SELECT 3, ''
INSERT INTO @Table2 (ID,Val) SELECT 1, 'a'
INSERT INTO @Table2 (ID,Val) SELECT 2, 'a'
UPDATE @Table1
SET Val = t2.Val
FROM @Table1 t1 INNER JOIN
@Table2 t2 ON t1.ID = t2.ID
SELECT * FROM @Table1
试试这个
DECLARE @Table1 TABLE(
ID INT,
Val VARCHAR(MAX)
)
DECLARE @Table2 TABLE(
ID INT,
Val VARCHAR(MAX)
)
INSERT INTO @Table1 (ID,Val) SELECT 1, ''
INSERT INTO @Table1 (ID,Val) SELECT 2, ''
INSERT INTO @Table1 (ID,Val) SELECT 3, ''
INSERT INTO @Table2 (ID,Val) SELECT 1, 'a'
INSERT INTO @Table2 (ID,Val) SELECT 2, 'a'
UPDATE @Table1
SET Val = t2.Val
FROM @Table1 t1 INNER JOIN
@Table2 t2 ON t1.ID = t2.ID
SELECT * FROM @Table1
我认为
UPDATE Table1 as T1...
将导致别名更新,而实际表保持不变
您可以使用标量子查询,例如
UPDATE Table1
SET SomeValue = (
SELECT T2.SomeValue
FROM Table2 as T2
WHERE T2.ID = Table1.ID
);
我认为
UPDATE Table1 as T1...
将导致别名更新,而实际表保持不变
您可以使用标量子查询,例如
UPDATE Table1
SET SomeValue = (
SELECT T2.SomeValue
FROM Table2 as T2
WHERE T2.ID = Table1.ID
);
在T1.Id=T2.FId上更新T1集T1.Col1=T2.Col2内部联接T2在T1.Id=T2.FId上更新T1集T1.Col1=T2.Col2内部联接T2避免在SQL Server 2008中使用“使用联接更新”功能。改用合并。MERGE是标准的SQL(与UPDATE join语法不同),通常执行得更好,更可靠,因为它不像Microsoft专有的更新语法那样存在缺陷。避免在SQL Server 2008中使用“带连接的更新”功能。改用合并。MERGE是标准的SQL(与updatejoin语法不同),通常执行得更好,更可靠,因为它不像微软专有的更新语法那样有缺陷