我有一个InnoDB表,其中列出了客户订单 - 此表记录了客户的电子邮件地址,订单的联系信息以及订单ID。该表使用innodb,包含大约2.2亿行。我没有的是一张列出用户的表格。
是否有可能(可能使用外键)为我创建并填充一个包含来自我的订单表中数据的customer_id
和e-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 :(得分:4)
您可以通过两个步骤实现这一目标:
1,填写customers
表格:
INSERT INTO customers (email, last_order ) SELECT email_address,
max(order_date) as last_order FROM orders GROUP by email_address;
2,用客户的ID更新orders
表(假设customer_id
表中有一个名为orders
的字段)
UPDATE orders o SET customer_id =
(SELECT id FROM customers WHERE email = o.email_address);
最后,如果您希望保持customers
表一致,可以在AFTER INSERT TRIGGER
表中添加orders
,以使您的customers
表保持最新状态