【问题标题】:Do UPDATE in SQL using a JOIN使用 JOIN 在 SQL 中执行 UPDATE
【发布时间】:2009-10-16 09:38:46
【问题描述】:

我正在使用 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

即无需显式执行 T1.SomeValue = SELECT..., T2.SomeValue = SELECT...

【问题讨论】:

    标签: sql join sql-update


    【解决方案1】:

    如果你像这样重写它应该可以工作:

    UPDATE Table1 
    SET Table1.SomeValue = T2.SomeValue
    FROM Table2 AS T2 
    WHERE Table1.ID = T2.ID
    

    【讨论】:

      【解决方案2】:

      试试这个

      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
      

      【讨论】:

        【解决方案3】:

        避免使用 SQL Server 2008 中的“UPDATE with a join”功能。改用 MERGE。 MERGE 是标准 SQL(与 UPDATE 连接语法不同),通常性能更好且更可靠,因为它不会遭受与 Microsoft 专有 UPDATE 语法相同的缺陷。

        【讨论】:

          【解决方案4】:

          我认为

          UPDATE Table1 as T1...
          

          将导致别名被更新而实际表保持不变。

          您可以使用标量子查询,例如

          UPDATE Table1 
             SET SomeValue = (
                              SELECT T2.SomeValue
                                FROM Table2 as T2 
                               WHERE T2.ID = Table1.ID
                             );
          

          【讨论】:

            【解决方案5】:

            更新 T1 设置 T1.Col1 = T2.Col2 在 T1.Id = T2.FId 上的内部连接 ​​T2

            【讨论】:

              猜你喜欢
              • 2010-11-20
              • 2022-11-30
              • 1970-01-01
              • 1970-01-01
              • 2017-11-19
              • 2021-10-08
              • 2018-03-18
              相关资源
              最近更新 更多