2012-07-18 62 views
0

下面将让我从一个参照表t2值我想插入或者用表t1更新现有的元组:在MySQL中,如何更新现有行的某些列并从参考表中插入新行?

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

如果有id一个元组t1已经存在,它应该有更新从t2中选择的值。如果在t1中不存在带有id的元组,则应该插入(id, col1),并将其他列设置为默认值。

如何有效地做到这一点?

回答

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 

UPDATE:

,我可以从here看到MySQL使用另一个sintax这一点。所以,你可以查询与此代替上面的查询工作:

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

但其概念是相同的(只是一个不同的语法) 你并不需要的地方,因为INNER JOIN将只使用字段比赛/加入。

+0

在第一个查询中是't1.id = t2.id,'必要的吗? – qazwsx 2012-07-18 17:23:10

+0

在更新中?不,只需要放置你想要更新的字段。在加入?是的,它是必需的 – 2012-07-18 17:26:16

+0

在第一个查询中,你不需要'更新t1 SET t1.col1 = t2.col1 WHERE t1.id = t2.id FROM t1 LEFT OUTER JOIN t2 ON t1.id = t2.id WHERE t2.id不是NULL'? – qazwsx 2012-07-18 17:27:01

相关问题