18

我有这些表和值:

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


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

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

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

4

5 回答 5

38

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

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在您满意时使用它。

于 2012-06-28T15:39:14.520 回答
10

如果您在两个表中都有 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 中有效,但在其他数据库中可能不同。

于 2012-06-28T15:39:57.553 回答
3

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

UPDATE t1
   SET t1.Value = t2.Value
  FROM table1 AS t1
         INNER JOIN 
       table2 AS t2
         ON t1.ID = t2.ID
于 2013-07-18T14:52:03.347 回答
3

以上答案在MySQL中都不适合我,但以下查询有效:

UPDATE
    Table1 t1
    JOIN
    Table2 t2 ON t1.ID=t2.ID 
SET
    t1.value =t2.value
WHERE
    ...
于 2018-05-10T13:36:17.870 回答
1

我在 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...
于 2015-08-03T22:27:51.173 回答