2017-02-17 290 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); 
相关问题