SQL Server查询解决方案和建议要求

时间:2010-03-27 11:48:13

标签: sql sql-server-2005

我的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表中可用的纬度和经度字段。

还有一些zipcodeszipcode表中没有条目,所以它应该保持为空。

主要问题就是我的数据库中有超过50,00,000条记录。因此,查询应支持此功能。

我尝试了一些解决方案,但遗憾的是没有得到正确的输出。

任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:5)

您可以尝试类似

的内容
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

您可以从文档中验证这一点

UPDATE (Transact-SQL)