2012-07-18 59 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

相關問題