我有两张桌子:
zipcodes:id |州|区|邮政编码(约40k记录)
县:id |州|区|县(478条记录)
以下是示例数据:
以下是phpmyadmin的两个表的快照: 这是我尝试过的:
select a.state, a.district,a.zipcode,
b.county from zipcodes a inner join
county b on a.state=b.state and
a.district =b.district
但它会返回大量行,每个邮政编码重复12次。
州和地区行具有相同的值。我想要做的是获取和回显:
州|区|邮编|县
通过匹配两个表中的州和区行,因为每个县有多个zipcodes。
我尝试在while循环中使用while循环并且没有用。我在选择时也尝试使用JOIN,但也不正确。
实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
select a.state, a.district,a.zipcode,
b.county from zipcodes a inner join
county b on a.state=b.state and
a.district =b.district
答案 1 :(得分:0)
问题是你没有密切关注你的表和查询的含义。
我假设
这些表包含行
in state [state] district [district] contains zipcode [zipcode] ...
in state [state] county [county] intersects district [district] ...
当您加入表格时,您会获得行
in state [state] district [district] contains zipcode [zipcode] ...
AND in state [state] county [county] intersects district [district] ...
因此,当一个地区和县相交时,该地区和县会出现所有地区的邮政编码。即一个区域和许多县出现的邮政编码。但那不是你想要的!你(大概)想要的是,区和县的交叉口的邮政编码。即其区和县的邮政编码。但是这些信息无法从您的表中获得。您需要另一张表来告诉您每个邮政编码的县。然后你可以加入邮政编码上的两个邮政编码表。
in state [state] district [district] contains zipcode [zipcode] ...
AND county [county] contains zipcode [zipcode]
事实上,您的表可能是使用每个邮政编码都有区和县的表来派生的。
根据我的假设是否正确,情况可能更复杂。也许zipcodes可以跨越区域和/或县界限和/或州界限。
这是具有规范形式问题的二维区间的示例,例如时间数据库,其中区间是一维的。
PS (写完上述内容后。)
谷歌搜索"区域边界跨邮政编码":
国会区 - 邮政编码数据库...
https://www.zipinfo.com/products/cdz/cdz.htm
如果5位邮政编码跨越国会区边界, 你必须使用街道地址来确定正确的国会 任何地区...
谷歌搜索"邮政编码可以跨越州界线":
邮政编码常见问题 - 来自carrierroutes.com
www.carrierroutes.com/ZIPCodes.html
这个数字可能会波动 每年几千个邮政编码,取决于....邮政编码很少 交叉州线,但跨县线通常为10%。
这意味着我们确实需要更复杂的项目符号假设来取代第四个假设。在这一点上,我真的不知道你想要什么查询。也许你想要每个邮政编码及其区县交叉点。 (如果每个邮政编码不止一个,你需要识别交叉点。也许COUNTY TABLE已经给出了州,区和县交叉点的那些ID。虽然与邮政编码没有关系。)
zipcode [zipcode] contains the intersection [id] of
state [state], district [district] and county [county]
我不知道您可以使用哪些特定的表来构建查询,但基本数据只是绘制州,区,县和邮政编码边界的工件。
我将从区 - 邮政编码链接中留下一个完整的段落:
其他有用数据......
使用国会区 - 邮政编码 数据库,您可以找到部分或部分的每个邮政编码 完全在一个特定的国会区内。或者你可以找到所有 包含特定ZIP部分内容的国会选区 码。您还可以找到城市,县和县FIPS代码 与每个国会区相关联。或者你可以识别所有 邮政编码位于特定的国会区和 也属于特定的MSA / PMSA。