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

Nir*_*mal 2 sql sql-server-2005

我的SQL Server 2005数据库中有以下方案.

zipcodes table有以下字段和值(只是一个示例):

zipcode     latitude   longitude
-------     --------   ---------
65201      123.456     456.789
65203      126.546     444.444
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

现在,我的要求就像我要比较我的place表格的邮政编码并更新表格中的可用纬度和经度字段zipcode.

并且有一些zipcodeszipcode表中没有条目,所以应该保持为null.

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

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

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

Adr*_*der 5

你可以尝试类似的东西

UPDATE place
SET     latitude = z.latitude,
        longitude = z.longitude
FROM    place p INNER JOIN
        zipcodes z ON p.zip = z.zipcode
Run Code Online (Sandbox Code Playgroud)

见例子

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
Run Code Online (Sandbox Code Playgroud)

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

更新(Transact-SQL)