使用联接在SQL中执行更新

使用联接在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

我正在使用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
        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语法不同),通常执行得更好,更可靠,因为它不像微软专有的更新语法那样有缺陷