Решение SQL Server Query cum Предложение Обязательно - PullRequest
2 голосов
/ 27 марта 2010

В моей базе данных SQL Server 2005 есть следующий сценарий.

zipcodes таблица имеет следующие поля и значения (только образец):

zipcode     latitude   longitude
-------     --------   ---------
65201      123.456     456.789
65203      126.546     444.444
Таблица

и place имеет следующие поля и значение:

id     name     zip      latitude   longitude
--     ----     ---      --------   ---------
1      abc      65201     NULL        NULL
2      def      65202     NULL        NULL
3      ghi      65203     NULL        NULL
4      jkl      65204     NULL        NULL

Теперь мое требование таково, что я хочу сравнить почтовые индексы таблицы place и обновить доступные поля широты и долготы из таблицы zipcode.

И некоторые из zipcodes не имеют записи в таблице zipcode, поэтому они должны оставаться нулевыми.

И главная проблема в том, что у меня в базе более 50 000 записей. Таким образом, запрос должен поддерживать эту функцию.

Я попробовал некоторые решения, но, к сожалению, не получил правильного вывода.

Буду признателен за любую помощь ...

1 Ответ

5 голосов
/ 27 марта 2010

Вы можете попробовать что-то вроде

UPDATE place
SET     latitude = z.latitude,
        longitude = z.longitude
FROM    place p INNER JOIN
        zipcodes z ON p.zip = z.zipcode

См. Пример

DECLARE @zipcodes TABLE(
        zipcode VARCHAR(10),
        latitude   FLOAT,
        longitude FLOAT
)

DECLARe @place TABLE(
        id INT,
        name VARCHAR(10),
        zip VARCHAR(10),
        latitude FLOAT,
        longitude FLOAT
)

INSERT INTO @zipcodes SELECT '65201',123.456,456.789 
INSERT INTO @zipcodes SELECT '65203',126.546,444.444

INSERT INTO @place SELECT 1,'abc','65201',NULL,NULL 
INSERT INTO @place SELECT 2,'def','65202',NULL,NULL 
INSERT INTO @place SELECT 3,'ghi','65203',NULL,NULL 
INSERT INTO @place SELECT 4,'jkl','65204',NULL,NULL 

UPDATE @place
SET     latitude = z.latitude,
        longitude = z.longitude
FROM    @place p INNER JOIN
        @zipcodes z ON p.zip = z.zipcode

SELECT  *
FROM @place

Вы можете проверить это из документации

ОБНОВЛЕНИЕ (Transact-SQL)

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