2014-01-21 7 views
-3

У меня есть таблица почтовых индексов и хранимая процедура для вычисления всех zip-кодов в радиусе X с учетом почтового индекса и радиуса.SQL - обновление таблицы с использованием хранимой процедуры

Например, чтобы найти все почтовые индексы в пределах 200 миль от 10001, я бы ввел CALL zip(10001,200) и отобразил бы каждый почтовый индекс.

В новой колонке «hradius» я хотел бы иметь все почтовые индексы в пределах 200 миль от почтового индекса этой строки.

Я очень новичок в SQL, спасибо за любую помощь.

+0

Вы не хотите хранить несколько почтовых индексов в одном столбце, что является ненужной денормализацией. – RedFilter

+2

Какой вкус SQL (Oracle, SQL Server, DB2, MySQL)? – SQLMason

+0

Как вы собираетесь хранить несколько ZipCodes в одном столбце? – SQLMason

ответ

0

Не вставляйте строку с несколькими значениями в одно поле. Создать связанную таблицу, чтобы связать один почтовый индекс, чтобы несколько:

ZipOrigin ZipDest Distance 
12345  23456  150 
12345  34567  175 
... 

(Расстояние не является обязательным - например, вы можете использовать его, чтобы найти все почтовые индексы в пределах любого радиуса менее X)

+0

Интересно, где он измеряет от центра zip до центра zip (в конце концов он говорит о радиусе). Например, если почтовый индекс равен 420, он может «выглядеть» так, как если бы почтовый индекс был более 200 миль (от центра к центру), однако почтовый индекс мог быть смежным. – SQLMason

0

В этой ситуации, если вы хотите предварительно создать свой список совпадений, вам гораздо лучше использовать отдельную таблицу для матчей. У вас будет две таблицы: одна для ваших почтовых индексов и одна для матчей. Вторая таблица будет иметь два столбца: один для исходного почтового индекса и один для соответствующего почтового индекса в пределах X миль (в этом случае 200). Для каждого матча будет отдельная строка. Результаты хранимой процедуры должны выводиться во вторую таблицу. После того, как вы есть, что вы можете использовать запрос вроде следующего:

SELECT zip.zipcode, zipJoin.zipcode 
FROM zipCodes zip 
    INNER JOIN zipCodeMatches zipJoin 
     ON zip.zipcode = zipJoin.sourceZipCode 
WHERE zip.zipcode = @zip 

Вы должны потратить некоторое время на изучение правильной конструкции стола и нормализации и как соединить таблицы вместе, чтобы помочь вам понять эти понятия.

Смежные вопросы