以下内容将从我想要插入或更新表t2
中的现有元组的参考表t1
中获取值:
SELECT
id, col1
FROM
t2
LEFT OUTER JOIN
t1
ON
t2.id=t1.id
如果id
中已存在t1
的元组,则应使用从t2
中选择的值进行更新。如果id
中不存在t1
的元组,则应插入(id, col1)
,并将其他列设置为默认值。
如何有效地做到这一点?
答案 0 :(得分:1)
使用这两个querys:
这将加入并过滤,为您提供两个表中存在的值,因此您只需执行更新
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使用另一个sintax。因此,您可以使用此查询而不是上述查询:
UPDATE t1 temp1
INNER JOIN t2 temp2
ON temp1.id= temp2.id
SET temp1.col1= temp2.col1
但概念是相同的(只是不同的语法) 你不需要Where,因为INNER JOIN只会使用匹配/ join的字段。