【问题标题】:duplicate answers when predicate in more than one field SQL多个字段 SQL 中的谓词时重复答案
【发布时间】:2011-11-16 14:28:46
【问题描述】:

我对此很陌生,即使是与我类似的问题的答案对我来说也没有任何意义(我上周开始使用 SQL)

我正在尝试列出表 1 中的地址,其中每个地址中有多个具有相同名字和姓氏的地址(即 John Smith 和 John Smith)。我在不同的字段中有名字和姓氏。

我试过了

SELECT *  
FROM addresses  
WHERE EXISTS (  
    SELECT individuals.FirstName  
    AND individuals.Surname  
    FROM individuals  
    WHERE addresses.AddressID = individuals.AddressID  
    GROUP BY addresses.StreetName  
    HAVING COUNT( * ) >1`  

但这只是给了我一个包含多个人的每个地址的列表.. 谁能给我一个(简单的)答案,我可能会理解。 谢谢,斯泰西

【问题讨论】:

  • 刚刚编辑了您的帖子以改进格式,并注意到您的 SQL 在语法上不正确。请使用您使用的查询编辑您的问题。
  • 天哪,这是我使用的查询。
  • 您能否指定您期望的输出类型?你目前得到的是哪一个?很难确切地看到您要查询的内容
  • 至少缺少一个右括号。我认为内部 SELECT 子句中的“AND”是逗号?
  • 正常的英文只是“列出两个同名的人的地址”,我试图返回一个地址列表。我已经设法通过 Marco 下面给出的解决方案获得了我正在寻找的列表,方法是编辑 individual.firstname 等。我之前没有见过 CONCAT_WS 或使用 ' '。

标签: sql database predicate


【解决方案1】:

如果你添加

individuals.FirstName, individuals.Surname

之后

GROUP BY addresses.StreetName

那应该做你想做的。

【讨论】:

    【解决方案2】:
    SELECT addresses.* 
    FROM addresses
    INNER JOIN
    (
        SELECT AddressID 
        FROM individuals
        GROUP BY AddressID, FirstName, Surname
        HAVING COUNT(*) > 1
    ) as tbl1
    ON tbl1.AddressID = addresses.AddressID
    

    【讨论】:

    • 谢谢大家 - 设法让它工作。希望我能尽快学会。
    【解决方案3】:

    怎么样:

    SELECT 
        a.*
    
    FROM 
        addresses a
            JOIN
        individuals i
        ON a.AddressID = i.AddressID
    
    GROUP BY
        a.StreetName, i.FirstName, i.Surname
    
    HAVING
        COUNT(1) > 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2014-10-31
      • 2015-06-09
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多