使用表B中的所有新条目更新表A并更新A到B中的现有条目

时间:2017-02-17 11:59:18

标签: mysql

我有一个表A,其中包含几个带条目的列。第1列是唯一的广告系列名称。表A包含所有相关的历史数据。 我有另一个表B,它包含相同的列和条目。表B中的一些条目也可以已经存在于表A中(活动名称与表A相同)但可以(不必须)包含其他列中的不同条目。 B是我的更新表,包含(某些)新数据。

现在我要做的是: 我想完全从表B到A添加所有新条目(第1列中的广告系列名称不在表中的行),并使用diffent更新/替换现有条目(第1列中的广告系列名称已在A中的行)其他栏目中的条目。

以下是一个例子:

例如,如果表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`);

- >但这只是解决方案的一部分......

不幸的是我不知道如何解决这个问题...:/

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果col1primary key,您可以尝试:

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