SQL ... Как обновить строки с данными из других строк в той же таблице? - PullRequest
3 голосов
/ 11 февраля 2011

Я использую сервер MySQL, и у меня есть таблица, в которой в некоторых строках отсутствуют данные. Я хотел бы обновить строки, используя информацию из других строк. Мой стол выглядит примерно так:

id,signin,deviceId,deviceModel
1,2010-10-12,9ABC9,
2,2010-10-12,3E44F,
3,2010-10-13,D3453,
4,2010-10-14,D3453,
5,2010-10-14,D3453,HW1
6,2010-10-12,3E44F,HW2
7,2010-10-12,9ABC9,HW1

Для первых нескольких записей поле deviceModel пустое. Я хотел бы обновить это значение, используя deviceModel, найденный для deviceId в других строках этой же таблицы. В приведенном выше примере строка 1 должна иметь deviceModel = HW1, строка 2 должна иметь deviceModel = HW2 и т. Д.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Прежде всего, это денормализованный дизайн.Вам следует переместить отношение deviceModel -> deviceId в другую таблицу.

Секунда:

UPDATE
  yourTable AS t1
CROSS JOIN (
  SELECT DISTINCT 
    deviceId, deviceModel 
  FROM 
    yourTable 
  WHERE 
    deviceModel IS NOT NULL
) AS t2
USING (deviceId)
SET
  t1.deviceModel = t2.deviceModel
WHERE
  t1.deviceModel IS NULL
2 голосов
/ 11 февраля 2011

Self Join -

UPDATE MyTable m1, MyTable m2 
SET m1.deviceModel= m2.deviceModel
WHERE m1.deviceid=m2.deviceid and m2.deviceModel is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...