MySQL:插入...从...中选择重复键

Dan*_*wan 2 mysql

我有表 A中的一条记录:

_____________________________________________________________________________
    Date       |      country        |      channel      |       clicks  
_____________________________________________________________________________
    1-01-2016  |         US          |        MTV        |        100

    1-01-2016  |         US          |        MTV        |         50
_____________________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

我将此记录插入到另一个表 B使用查询:

INSERT INTO B 
SELECT 
  DATE,
  country,
  channel,
  SUM(clicks) AS clicks 
FROM
  A 
GROUP BY DATE,
  country,
  channel;
Run Code Online (Sandbox Code Playgroud)

现在表 B看起来像:

_____________________________________________________________________________
    Date       |      country        |      channel      |       clicks  
_____________________________________________________________________________
    1-01-2016  |         US          |        MTV        |        150
_____________________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

在其他某个时刻,我在表 A 中得到另一条记录

_____________________________________________________________________________
        Date       |      country        |      channel      |       clicks  
_____________________________________________________________________________
        1-01-2016  |         US          |        MTV        |        300
_____________________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

现在我想更新表 B中的旧记录,它应该如下所示:

_____________________________________________________________________________
        Date       |      country        |      channel      |       clicks  
_______________________________________________________________________________
        1-01-2016  |         US          |        MTV        |        450
_____________________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

我怎样才能用MySQL做到这一点

100*_*111 5

您可以使用相同的查询(用于insert)来INNER JOIN进行更新。

UPDATE B
INNER JOIN 
(
  SELECT 
    DATE,
    country,
    channel,
    SUM(clicks) AS clicks 
  FROM  A 
  GROUP BY DATE,  country,   channel
)AS t
ON B.Date = t.Date AND B.country = t.country AND B.channel = t.channel
SET B.clicks = t.clicks;
Run Code Online (Sandbox Code Playgroud)

编辑:

为了update/insert通过同样的查询。

INSERT INTO B SELECT
    t.DATE,
    t.country,
    t.channel,
    t.clicks
FROM 
(
    SELECT
        DATE,
        country,
        channel,
        SUM(clicks) AS clicks
    FROM A
    GROUP BY DATE, country, channel 
) AS t
ON DUPLICATE KEY UPDATE clicks = t.clicks
Run Code Online (Sandbox Code Playgroud)