1

我有两个表,都有相同的数据:

IP address | count

我需要将这两个表组合成一个新表,其中包含两个原始表中的数据。

  • 如果两个表中都有匹配的记录,则应添加它们的计数。
  • 如果有一条记录只存在于一个表中,它将被复制到新表中。

让第一个表称为 ip_data_january,第二个称为 ip_data_february,我要创建的表是 ip_data_yearly。提前致谢。

4

3 回答 3

2

第一次只插入新的 IP 地址(计数从零开始)

 insert into ip_data_yearly (ip_adress, count) 
    (select distinct ip_address, '0' from jan_table 
    where ip_addess not in (select ip_adress from  ip_data_yearly);

第二次更新计数

update ip_data_yearly y 
set count= count + 
  (select count(j.ip_adress) from jan_table where j.ip_adress=y.ip_adress);

..

第三次这样做所有月份

于 2013-06-13T13:21:28.363 回答
2

您可以使用ON DUPLICATE KEY UPDATE I Assume Unique index on IP_Address .. 然后

INSERT INTO  ip_data_yearly (ip_adress) 
SELECT IP_Address FROM IP_Data_January
UNION ALL SELECT IP_Address FROM IP_Data_February 
ON DUPLICATE KEY UPDATE `count`=`count`+1;
于 2013-06-14T09:25:06.540 回答
1

如果IP_Data_Yearly表为空,则INSERT使用按 IP 聚合计数的子查询应该可以解决问题:

INSERT INTO IP_Data_Yearly
  SELECT IP_Address, SUM(Count)
  FROM (
    SELECT IP_Address, Count FROM IP_Data_January
    UNION ALL SELECT IP_Address, Count FROM IP_Data_February
  ) IPCombined
  GROUP BY IP_Address
于 2013-06-13T13:18:26.680 回答