如何合并2个表暂时使用替换一些独特的数据

时间:2016-08-29 02:00:15

标签: mysql performance merge

我正在尝试将两个表合并到一个表中。使用下表的示例,我需要将表B的Purchase_Date合并到表A的空白Purchase_Date中。表A包含与购买日期相关联的电子邮件,在表A中,电子邮件是唯一的。但是,在表B中有许多电子邮件地址,它们并不是唯一的。当我将两个表合并在一起时,我需要表B中的最新或最大日期进入表A.

出于性能原因,表A有~33.5k行,表B有~550k行。

Table A
Email           Purchase_Date
-----------     ---------------
test@test.ca    
test2@test.ca   
test3@test.ca

Table B
Email           Purchase_Date
-----------     ---------------
test@test.ca    2016-08-01 0:00:00
test@test.ca    2016-08-03 0:00:00
test2@test.ca   2016-08-13 0:00:00
test2@test.ca   2016-08-14 0:00:00
test2@test.ca   2016-08-15 0:00:00
test3@test.ca   2016-08-27 0:00:00

2 个答案:

答案 0 :(得分:1)

您可以使用 static void LongRunningMethod() { try { //fetch something from external period and maybe exception happens. Thread.sleep(100000); } catch(Exception ex) { //log exception.. LongRunningMethod(); } } update和子查询来获取join日期:

max

答案 1 :(得分:0)

对于表B中的最近或最大日期,SQL SERVER&中有一个非常有用的排名函数。 ORACLE,以下:

WITH GreatestDate AS(
SELECT Purchase_Date, Email,ROW_NUMBER() OVER(PARTITION BY Email ORDER BY Purchase_Date  DESC) AS rownum
FROM B
)

SELECT * FROM GreatestDate WHERE rownum=1

然后合并到表A;

很可惜,mysql不支持那些排名功能。

我有同样的问题,在讨论中提出了一个想法。