以下将从引用表t2
中获取值,我想插入或更新表t1
中的现有元组:
SELECT
id, col1
FROM
t2
LEFT OUTER JOIN
t1
ON
t2.id=t1.id
如果 t1
中已存在具有 id
的元组,则应使用从 t2
中选择的值对其进行更新。如果t1
中不存在带有id
的元组,则应插入(id, col1)
,并将其他列设置为默认值。
如何有效地做到这一点?
最佳答案
使用这两个查询:
这将连接和过滤,为您提供两个表中都存在的值,因此您只需执行更新
Update t1 set t1.col1 = t2.col1
from t1 inner join t2 on t1.id = t2.id
这将连接和过滤,为您提供 t2 中的值,但不在 t1 中,因此您只需执行插入即可。
insert into t1 select t2.id, t2.col1
from t2 left outer join t1 on t2.id = t1.id where t1.id IS NULL
更新:
正如我从 here 中看到的,MySQL 为此使用了另一种语法。因此,您的查询可以使用此查询而不是上面的查询:
UPDATE t1 temp1
INNER JOIN t2 temp2
ON temp1.id= temp2.id
SET temp1.col1= temp2.col1
但概念是相同的(只是语法不同) 您不需要Where,因为INNER JOIN将仅使用匹配/连接的字段。
关于mysql - 在 MySQL 中,如何更新现有行的某些列并从引用表中插入新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11546785/