我的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,00,000条记录。因此,查询应支持此功能。
我尝试了一些解决方案,但遗憾的是没有得到正确的输出。
任何帮助将不胜感激......
答案 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
您可以从文档中验证这一点