选择2个表在记录匹配时复制唯一的数字

时间:2012-07-30 03:56:56

标签: mysql sql

我有2个表1. paypal_ipn_orders表2是查找。查找表我有一个包含列名称项目的所有项目的列表我还有另一列标记为sort_id,这是一个内部用于我所有项目的8位数字。表1 paypal_ipn_orders接收订单并有几列,但只有少数对该问题很重要。 id,payer_email,item_name,sort_num和payment_status。我需要发生的是当订单进入表paypal_ipn_orders时我需要交叉引用查找表并在项名称匹配时将8位数分配给标记为sort_num的列。

table: paypal_ipn_orders
id       payer_email         item_name        sort_num               payment_status
1        greg@gmail.com      batman card      NULL                    completed
2        steve@gmail.com     superman card    NULL                    completed
3        gary@gmail.com      spiderman card   NULL                    completed
4        sarah@gmail.com     captain america  NULL                    completed

这是示例查找表

table: lookup
item                   sort_id
batman card            12345678
superman card          12345677
spiderman card         12345676
captain america        12345675

在运行查询后我希望输出看起来像什么。

table: paypal_ipn_orders
id       payer_email         item_name        sort_num               payment_status
1        greg@gmail.com      batman card      12345678                completed
2        steve@gmail.com     superman card    12345677                completed
3        gary@gmail.com      spiderman card   12345676                completed
4        sarah@gmail.com     captain america  12345675                completed

我知道这不是正确的语法,但你会明白

SELECT lookup.sort_id
INSERT INTO paypal_ipn_orders.sort_num
WHERE lookup.item = paypal_ipn_orders.item_name 

1 个答案:

答案 0 :(得分:1)

您需要使用UPDATE,而不是INSERT

UPDATE paypal_ipn_orders
SET sort_num = (SELECT sort_num
                FROM lookup
                WHERE lookup.item = paypal_ipn_orders.item_name)

但有两个旁注:

  1. 这样做会更新整个表格。最好在插入时在触发器中执行此操作。

  2. 如果sort_num总是取决于sort_num表中的值,我想知道存储lookup两次的好处。如果您尝试在插入时保存值或者能够手动更改它,则有意义。 (也就是说,如果您更改了sort_num表格中的lookup,但又希望将原始值保留在paypal_ipn_orders中。)