【问题标题】:select from same table where two columns match and third doesn't从两列匹配而第三列不匹配的同一个表中选择
【发布时间】:2013-05-11 05:11:46
【问题描述】:

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

我已经尝试过内部连接,但它不能在同一张桌子上工作。我也尝试了以下脚本:

select fedcodes., count() num, FEATURE_NAME, STATE_ALPHA from fedcodes group by FEATURE_NAME, STATE_ALPHA 有 num > 1 ORDER BY fedcodes.FEATURE_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 只在一个县,所以我不需要选择那个。我希望这个例子能更好地解释事情。

【问题讨论】:

  • 你试过什么?
  • 这个问题没有显示任何研究工作。 做好功课很重要。告诉我们您发现了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案。 FAQ.
  • 我的错误。我专注于发布问题,所以忘记添加我尝试过的内容。我编辑了帖子并添加了我尝试过的内容。请理解我首先对MYSQL不太熟悉。

标签: mysql


【解决方案1】:

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

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 

【讨论】:

  • 当我在 line1 中添加表中的所有字段时,它返回:字段列表中的列 'FEATURE_CLASS' 不明确
  • 您需要指定它来自 fedcodes 表的哪个实例。试试T1.FEATURE_CLASS,让它知道从哪个副本中选择该字段。
  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''COUNTY_NUMERIC, fedcodes.COUNTY_NAME, fedcodes.DATE_CREATED, fedcodes.PRI' 附近使用正确的语法
【解决方案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

【讨论】:

  • 这一张还给我整张桌子。即使列中有一个条目,它也会在表的第二个实例的同一列中匹配。
  • @user2364198 你看过我提供的 sqlfiddle 了吗?请提供示例数据(一些相关的行)。
  • 我附上了一些示例行和简短的解释。抱歉,我也不擅长使用 stackoverflow。 :(
  • 其实这就是我所需要的。我第一次肯定犯了一些愚蠢的语法错误。非常感谢!
  • @user2364198 我已经用你的数据更新了 sqlfiddle。它准确地为您提供了您所要求的内容。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 2019-03-15
  • 2019-10-04
  • 1970-01-01
  • 2015-07-18
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多