使用表B中的所有新条目更新表A AND通过B更新A中的现有条目
问题描述:
我有一个表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只能解决一部分...
不幸的是我不知道如何解决这个问题...:/
在此先感谢!
答
如果col1
是primary key
你可以试试这个:
INSERT INTO A
SELECT * FROM B ON DUPLICATE KEY
UPDATE col2=VALUES(col2), col3=VALUES(col3);
其实 '20161512' 是两倍于你预期的结果吧? –
我认为您需要将表B中的值插入到表A中。 –
是的:但是“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