在同一个SQL表中查找成对的双重条件

问题描述 投票:1回答:2

它可能非常简单,但我是SQL的新手。我有一个包含3列的地址表:城市,州,邮政编码。我希望能够提取每个与特定状态配对的特定城市列表,因此我写了一个这样的查询:

select ZIPCode from USZipCodes where 
(CityName='New York' and StateAbbr='NY') or 
(CityName='Philadelphia' and StateAbbr='PA') 

但是,我需要重复这个以获得100多个城市/州对的列表,所以我想知道如何简化这个?

sql condition
2个回答
0
投票

您可能值得花时间制作一个包含所有这些对的查​​找表,然后在查询中只需将JOIN添加到该查找表中:

select ZIPCode 
from USZipCodes a
JOIN pairs b
 ON a.CityName = b.CityName
 AND a.StateAbbr = b.StateAbbr

但除此之外,你所拥有的一切都很好。

我建议使用Excel来构建sql,因为你有很多要列出来的。

也可能没有很多对需要明确定义,即:纽约,CO可能不是问题,要找到流行率并可能限制列表对的需要,您可以检查哪些城市有多个州缩写:

SELECT CityName
FROM USZipCodes
GROUP BY CityName
HAVING COUNT(DISTINCT StateAbbr)>1

0
投票

如果您的数据库支持它,您可以使用元组语法。

select CityName, StateAbbr, ZIPCode 
from USZipCodes 
where (CityName, StateAbbr) IN (
    ('New York', 'NY') ,
    ('Philadelphia','PA') 
)
© www.soinside.com 2019 - 2024. All rights reserved.