2011-02-04 76 views
1

我有一个InnoDB表格,列出了客户订单 - 该表格记录了客户的电子邮件地址,订单的联系信息以及订单ID。该表使用innodb,包含大约2.2亿行。我没有的是列出用户的表格。使用InnoDB创建和使用外键填充表格

是否有可能使用外键来创建和填充将包含来自订单表中数据的customer_ide-mail地址的表?

这是查询我到目前为止有:

INSERT INTO customers (email, last_order) 
    SELECT (email_address, order_date) FROM orders 
ON DUPLICATE KEY 
    UPDATE last_order = MAX(order_date, last_order); 

我相信这个查询将建立数据库,但它不会把客户ID到订单表中的行,我不知道这是否是最好的方法。有什么建议么?

+0

如果它没有失败,看起来不错。 – Nishant 2011-02-04 20:26:03

回答

3

可以在2个步骤此实现它:

1,填写customers表:

INSERT INTO customers (email, last_order) SELECT email_address, 
max(order_date) as last_order FROM orders GROUP by email_address; 

2,与客户的IDS更新orders表(假设你有一个字段名为customer_idorders表)

UPDATE orders o SET customer_id = 
    (SELECT id FROM customers WHERE email = o.email_address); 

最后,如果你想保持你的customers表一致,您可以将AFTER INSERT TRIGGER添加到orders表中,以使您的customers表保持最新状态。