如何使用另一个列表中的值更新具有一个列表中的ID的行

时间:2018-07-03 20:10:31

标签: mysql sql

是否有一个简单的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订单,依此类推。

1 个答案:

答案 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)作为表名更为方便。