是否有一个简单的MySQL / SQL表达式来更新列表中具有ID的记录,并使用另一个列表提供的值?
示例:
List of customer ids -
001, 002, 003, 004, ... (etc. list of 1000+ customer ids)
List of order ids -
00A, 00B, 00C, 00D, ... (etc. list of 1000+ order ids)
我想要一种简单的方法来执行以下操作,而无需使用1000+条这样的SQL语句-
update order set orderId = '00A' where customerId = 001;
update order set orderId = '00B' where customerId = 002;
update order set orderId = '00C' where customerId = 003;
etc.
注意:列表按customerId到orderId的正确顺序排列,001表示00A订单,002表示00B订单,依此类推。
答案 0 :(得分:1)
如果订单ID只是客户ID的十六进制值,则可以执行以下操作:
UPDATE `order` SET orderId = LPAD(HEX(customerId+9), 3, '0');
如果您想对映射进行更多控制,我将使用该映射创建一个表:
CREATE TABLE customerid_orderid (
customerId char(3),
orderId char(3),
PRIMARY KEY (customerId, orderId)
);
使用所需的配对加载它。
然后执行多表更新:
UPDATE `order` AS o
JOIN customerid_orderid AS c USING (customerId)
SET o.orderId = c.orderId;
PS:您可能会发现避免使用SQL reserved words(例如order
)作为表名更为方便。