以下将从t2
我想要插入或更新现有元组的引用表中获取值 in table t1
:
SELECT
id, col1
FROM
t2
LEFT OUTER JOIN
t1
ON
t2.id=t1.id
如果 中id
已存在的元组t1
,则应使用从中选择的值对其进行更新t2
。如果 ,id
中不存在具有 的元组t1
,(id, col1)
则应插入其他列并设置为默认值。
如何有效地做到这一点?
用这两个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
更新:
从这里我可以看到MySQL 为此使用了另一个 sintax。所以你的查询可能会使用这个而不是上面的查询:
UPDATE t1 temp1
INNER JOIN t2 temp2
ON temp1.id= temp2.id
SET temp1.col1= temp2.col1
但概念是相同的(只是语法不同)您不需要 Where,因为 INNER JOIN 只会使用匹配/连接的字段。