mySQL - обновить несколько столбцов с помощью select, возвращающего несколько строк

У меня есть таблица почтовых индексов, и я хочу обновить каждый почтовый индекс, указав его 3 ближайших соседа. То есть заполнить пробелы в этой таблице:

postcode  nearestPostcode1  nearestPostcode2  nearestPostcode3
_______________________________________________________________

KY6 1DA      -                -                  -
KY6 1DG      -                -                  -
KY6 2DT      -                -                  -
KY6 1RG      -                -                  -
....

Я вычислил запрос SELECT, чтобы найти ближайшие почтовые индексы, и вот один неуклюжий способ обновления первой строки:

update table1 set 
nearestPostcode1 = (select query for returning the first nearest postcode),
nearestPostcode2 = (select query for returning the second nearest postcode),
nearestPostcode3 = (select query for returning the third nearest postcode)
where postcode = 'KY6 1DA';

Однако это приведет к 3 запросам выбора выполняется для каждого обновления строки. Было бы более эффективно, если бы существовал способ сделать то, что выражается этим псевдокодом:

update table1 set 
(nearestPostcode1, nearestPostcode2, nearestPostcode3) = 
(select query to return the 3 nearest postcodes)
where postcode = 'KY6 1DA';

«Запрос выбора» в приведенном выше примере выглядит так:

select postcode from postcodeTable 
order by <equation to calculate distance> ASC 
limit 3

Есть ли способ, чтобы строки, возвращаемые из выбора, были поместить в форму, чтобы их можно было использовать для обновления нескольких полей? Спасибо.

14
задан spiderplant0 12 May 2011 в 22:40
поделиться