我有这些表和值:
Table1
------------------------
ID | Value
------------------------
2 | asdf
4 | fdsa
5 | aaaa
Table2
------------------------
ID | Value
------------------------
2 | bbbb
4 | bbbb
5 | bbbb
我想使用Table1中的值及其各自的ID来更新Table2中的所有值。
有没有办法用简单的SQL查询来做到这一点?
答案 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,我的英文