我有表 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做到这一点
您可以使用相同的查询(用于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)
| 归档时间: |
|
| 查看次数: |
5839 次 |
| 最近记录: |