使用select语句更新多行

时间:2012-06-28 15:31:13

标签: sql sql-server sql-server-2008 tsql

我有这些表和值:

Table1
------------------------
ID | Value
------------------------
2 | asdf
4 | fdsa
5 | aaaa


Table2
------------------------
ID | Value
------------------------
2 | bbbb
4 | bbbb
5 | bbbb

我想使用Table1中的值及其各自的ID来更新Table2中的所有值。

有没有办法用简单的SQL查询来做到这一点?

6 个答案:

答案 0 :(得分:36)

运行选择以确保它是您想要的

SELECT t1.value AS NEWVALUEFROMTABLE1,t2.value AS OLDVALUETABLE2,*
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID

更新

UPDATE Table2
SET Value = t1.Value
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID

另外,请考虑使用BEGIN TRAN,以便在需要时将其回滚,但请确保在满意后COMMIT

答案 1 :(得分:9)

如果两个表中都有ID,则以下方法有效:

update table2
    set value = (select value from table1 where table1.id = table2.id)

或许更好的方法是加入:

update table2
    set value = table1.value
    from table1
    where table1.id = table2.id

请注意,此语法在SQL Server中有效,但在其他数据库中可能有所不同。

答案 2 :(得分:2)

您可以使用别名来改进查询:

UPDATE t1
   SET t1.Value = t2.Value
  FROM table1 AS t1
         INNER JOIN 
       table2 AS t2
         ON t1.ID = t2.ID

答案 3 :(得分:2)

上述答案都不适用于 MySQL ,以下查询有效:

this.file.resolveLocalFilesystemUrl(this.file.dataDirectory).then((entry) => {
    console.log("Success! Got a DirectoryEntry",entry);  
});

答案 4 :(得分:0)

我在MySQL,MS Access和SQL Server上使用过这个。 id字段是表格重合的字段,而不是主要索引。

UPDATE DestTable INNER JOIN SourceTable ON DestTable.idField = SourceTable.idField SET DestTable.Field1 = SourceTable.Field1, DestTable.Field2 = SourceTable.Field2...

答案 5 :(得分:-2)

evalAsData(expr)

这里,更新正在m1.code中,其中condtion正在搜索子查询中的所有记录并返回所有匹配的行。我使用limit 1返回一个而不是重复。您可以使用不同的或限制1或前1或具有计数< 1 Sry,我的英文