Есть ли простое выражение MySQL/SQL для обновления записей, идентификаторы которых находятся в списке, со значениями, предоставленными другим списком?
ПРИМЕР:
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)
Я хочу простой способ сделать следующее, не имея SQL-операторов 1000+, подобных этому -
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, чтобы заказатьId, 001 для заказа 00A, 002 для заказа 00B и т.д.
Если идентификатор заказа - это просто шестнадцатеричное значение идентификатора клиента, вы можете сделать это:
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 (например, order
) в качестве имени вашей таблицы.
027
должен иметь orderId, равный0A0
чтобы проверить это я понимаю последовательность?