Как обновить строки с идентификаторами из одного списка со значениями из другого списка - PullRequest
0 голосов
/ 03 июля 2018

Существует ли простое выражение 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)

Я хочу простой способ сделать следующее, не имея более 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 голосов
/ 03 июля 2018

Если идентификаторы заказа - это просто шестнадцатеричное значение идентификатора клиента, то вы можете сделать это:

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) в качестве имени таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...