2017-02-17 280 views
0

我有一個表A,其中包含幾列包含條目的表。第1列是唯一的廣告系列名稱。表A包含所有相關的歷史數據。 我有另一個表B,包含與條目相同的列也。表B中的一些條目也可能已經存在於表A中(廣告活動名稱與表A相同),但可以(不必)在其他列中包含不同的條目。 B是帶有(某些)新數據的更新表。使用表B中的所有新條目更新表A AND通過B更新A中的現有條目

現在,我想要做的事: 我想從表B到A完全添加所有新條目(列1中的活動名稱不在表中的行)並更新/替換現有條目第1列中的廣告系列名稱已在A)中,其他列中的條目不同。

Here's一個例子:

例如,如果表A中包含:

|col1       ||col2 ||col3| 
+-----+ 
|20161512_NL_Luxus_1_DE   ||Andrea ||29 | 
|20161217_LC_YoBirthdayNo_A_CH ||Oscar ||38 | 
|20161512_NL_SDT_4_DE   ||James ||44 | 
|20170117_SV_YoBirthdayYes_A_DE ||Julia ||57 | 

,表B包含:

|col1       ||col2 ||col3| 
+------+ 
|20161512_NL_SDT_4_DE   ||James ||44 | 
|20170117_SV_YoBirthdayYes_A_DE ||George ||12 | 
|20161230_LC_YoBirthdayNo_A_CH ||Hank ||97 | 
|20170101_SV_YoBirthdayYes_A_DE ||Selma ||77 | 

我想要一個查詢,將更新表A如下:

|col1       ||col2 ||col3| 
+-----+ 
|20161512_NL_Luxus_1_DE   ||Andrea ||29 | 
|20161217_LC_YoBirthdayNo_A_CH ||Oscar ||38 | 
|20161512_NL_SDT_4_DE   ||James ||44 | 
|20170117_SV_YoBirthdayYes_A_DE ||George ||12 | 
|20161230_LC_YoBirthdayNo_A_CH ||Hank ||97 | 
|20170101_SV_YoBirthdayYes_A_DE ||Selma ||77 | 

這就是我這麼遠:

INSERT INTO A SELECT * FROM B WHERE `col1` NOT IN (SELECT `col1` FROM `A`); 

- >但是that's只能解決一部分...

不幸的是我不知道如何解決這個問題...:/

在此先感謝!

+0

其實 '20161512' 是兩倍於你預期的結果吧? –

+0

我認爲您需要將表B中的值插入到表A中。 –

+0

是的:但是「20161512」不是完整的廣告系列名稱 - 它只是其中的第一部分(「20161512_NL_Luxus_1_DE」和「20161512_NL_SDT_4_DE」是整個廣告系列姓名):'| 20161512_NL_Luxus_1_DE || Andrea || 29 |'&'| 20161512_NL_SDT_4_DE || James || 44 |'應該都在我的結果中,但每個都只有一次 – AbsoluteBeginner

回答

0

如果col1primary key你可以試試這個:

INSERT INTO A 
    SELECT * FROM B ON DUPLICATE KEY 
    UPDATE col2=VALUES(col2), col3=VALUES(col3); 
相關問題