从两个列匹配的同一个表中选择,而第三个不匹配

时间:2013-05-10 20:11:48

标签: mysql

我有包含FEATURE_NAMESTATE_ALPHACOUNTY_NAME列和人口数据的表格代码 - 以及其他数据。 我需要选择FEATURE_NAMESTATE_ALPHA匹配的所有条目,COUNTY_NAME不同。我还需要来自这些行的所有数据,而不仅仅是列出的那三行。 此外,我需要在输出列表中显示两个/所有这样的事件。请帮忙。

我尝试了内部联接,但它不能在同一个表上运行。我也尝试了以下脚本:

从fedcodes group by选择fedcodes。,count()num,FEATURE_NAMESTATE_ALPHA FEATURE_NAMESTATE_ALPHA有num> 1 ORDER BY fedcodesFEATURE_NAME DESC

但是我不知道如何添加COUNTY_NAME不相同的术语,它只输出一行,其中num列显示出现次数。

示例:

    ID  FEATURE_CLASS   FEATURE_ID  FEATURE_NAME    CENSUS_CODE     CENSUS_CLASS_CODE   GSA_CODE    OPM_CODE    STATE_NUMERIC   STATE_ALPHA     COUNTY_SEQUENCE     COUNTY_NUMERIC  COUNTY_NAME     DATE_CREATED    PRIMARY_LATITUDE    PRIMARY_LONGITUDE   DATE_EDITED     fips    COUNTRY_NAME    POPULATION_DATA     city_county_allocate    is_county
    146627  Populated Place     1616849     Wyandotte   88900   P1  5310    265310163   26  MI  1   163     Wayne   1980-04-14 00:00:00     42.2142064  -83.1499239     03/20/2008  26163   US  25883   100     1
    147139  Populated Place     1617956     Wyandotte   88890   U6  NULL    NULL    26  MI  1   61  Houghton    1980-04-14 00:00:00     46.8899335  -88.8754114     NULL    26061   US  0   0   0

    34  Populated Place     2195    Bumstead    8360    U6  NULL    NULL    4   AZ  1   13  Maricopa    1980-02-08 00:00:00     33.5733726  -112.3568269    NULL    04013   US  0   0   0

- 从示例中可以看出,Wyandote位于两个县,因此有两个条目,一个是人口数据25883,另一个是人口数据0所以我需要这两个条目。而Bumstead只在一个县,所以我不需要选择。我希望这个例子能更好地解释一下。

2 个答案:

答案 0 :(得分:4)

这里有一些伪代码可以帮助您入门。基本上你需要使用上面描述的规则将表连接回自身,然后返回你需要的任何字段。

SELECT  ... -- Add all the field you need from both intances of your table below
FROM    fedcodes T1 -- First instance of your table
INNER JOIN
        fedcodes T2 -- Second instance of your table
ON      T1.FEATURE_NAME = T2.FEATURE_NAME
AND     T1.STATE_ALPHA = T2.STATE_ALPHA 
AND     T1.COUNTY_NAME <> T2.COUNTY_NAME 

答案 1 :(得分:2)

尝试

SELECT f1.* 
 FROM fedcodes f1 JOIN
      fedcodes f2 ON f1.feature_name = f2.feature_name
                 AND f1.state_alpha = f2.state_alpha 
                 AND f1.county_name <> f2.county_name

<强> SQLFIddle