0

以下将从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)则应插入其他列并设置为默认值。

如何有效地做到这一点?

4

1 回答 1

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

更新:

这里我可以看到MySQL 为此使用了另一个 sintax。所以你的查询可能会使用这个而不是上面的查询:

UPDATE t1 temp1
INNER JOIN t2 temp2
ON temp1.id= temp2.id 
SET temp1.col1= temp2.col1

但概念是相同的(只是语法不同)您不需要 Where,因为 INNER JOIN 只会使用匹配/连接的字段。

于 2012-07-18T17:18:28.720 回答