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.
并且有一些zipcodes在zipcode表中没有条目,所以应该保持为null.
主要问题是我的数据库中有超过50,00,000条记录.因此,查询应该支持此功能.
我尝试了一些解决方案,但遗憾的是没有得到正确的输出.
任何帮助,将不胜感激...
你可以尝试类似的东西
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)
您可以从文档中验证这一点