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

时间:2013-09-03 17:53:51

标签: sql conditional-statements

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

select CityName, StateAbbr, ZIPCode 
from USZipCodes 
where (CityName, StateAbbr) IN (
    ('New York', 'NY') ,
    ('Philadelphia','PA') 
)