在MySQL中,如何更新现有行的某些列并从引用表中插入新行?

时间:2012-07-18 17:12:46

标签: mysql sql insert left-join

以下内容将从我想要插入或更新表t2中的现有元组的参考表t1中获取值:

SELECT 
  id, col1 
FROM 
  t2
LEFT OUTER JOIN 
  t1
ON 
  t2.id=t1.id

如果id中已存在t1的元组,则应使用从t2中选择的值进行更新。如果id中不存在t1的元组,则应插入(id, col1),并将其他列设置为默认值。

如何有效地做到这一点?

1 个答案:

答案 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的字段。