У меня есть таблица почтовых индексов, и я хочу обновить каждый почтовый индекс, указав его 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
Есть ли способ, чтобы строки, возвращаемые из выбора, были поместить в форму, чтобы их можно было использовать для обновления нескольких полей? Спасибо.