Mysql 使用表B中的所有新条目更新表A,并通过B更新A中的现有条目
我有一个表a,其中包含几个带有条目的列。第1列中是唯一的活动名称。表A包含所有相关的历史数据。 我还有另一个表B,它也包含相同的列和条目。表B中的某些条目也可以存在于表A中(活动名称与表A相同),但可以(不必)在其他列中包含不同的条目。B是我用(一些)新数据更新的表 现在我想做的是: 我希望将表B中的所有新条目(第1列中的活动名称尚未在表中的行)完全添加到A,并使用其他列中的不同条目更新/替换现有条目(第1列中的活动名称已在A中的行) 下面是一个例子: 例如,如果表A包含:Mysql 使用表B中的所有新条目更新表A,并通过B更新A中的现有条目,mysql,Mysql,我有一个表a,其中包含几个带有条目的列。第1列中是唯一的活动名称。表A包含所有相关的历史数据。 我还有另一个表B,它也包含相同的列和条目。表B中的某些条目也可以存在于表A中(活动名称与表A相同),但可以(不必)在其他列中包含不同的条目。B是我用(一些)新数据更新的表 现在我想做的是: 我希望将表B中的所有新条目(第1列中的活动名称尚未在表中的行)完全添加到A,并使用其他列中的不同条目更新/替换现有条目(第1列中的活动名称已在A中的行) 下面是一个例子: 例如,如果表A包含: |col1
|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 |
|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 |
表B包括:
|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 |
|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`);
->但这只是解决方案的一部分
不幸的是,我不知道如何解决这个问题……:/
提前谢谢 如果
col1
是主键
,您可以尝试以下操作:
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|u NL|u Luxus|1|DE|安德烈| 29 |
和20161512|u NL|u SDT|u 4|DE|詹姆斯| 44 |
都应该出现在我的结果中,但每次只有一次我自己找到答案。。。这样行吗<代码>更新A.col1=B.col1集合A.col2=B.col2,A.col3=B.col3上的内部联接B编码>(依此类推),然后插入到A SELECT*FROM B,其中col1不在(从A中选择col1)`我知道-这不是最优雅的方式…但它会起作用吗?!