【问题标题】:SQL - How to return all column fields for one column containing duplicatesSQL - 如何返回包含重复项的一列的所有列字段
【发布时间】:2018-03-02 22:05:04
【问题描述】:

我正在尝试掌握 SQL,因为我正在将 SQLite 实施到我现有的程序中。

我正在尝试研究如何在一个特定列中显示搜索重复值的结果,以及在哪里找到重复项,我希望所有与找到重复项的列单元格对应的行被显示。

例如对于数据库中的数据是:

Column A | Column B | Column C
Peter    | Smith    | 1234
Claire   | Walter   | 1234
Sandra   | Kay      | 0000
Oliver   | Meeson   | 3456
Alex     | Grey     | 0000
James    | Garnder  | 2489

我想在 C 列中搜索重复项。因此,查询会发现第 1 行和第 2 行包含 C 列中的重复值,以及第 3 行和第 5 行。因此,在找到的地方,我需要它返回 C 列包含重复项的所有三列的所有字段。所以我想要的结果是这样的:

Peter    | Smith    | 1234
Claire   | Walter   | 1234
Sandra   | Kay      | 0000
Alex     | Grey     | 0000

我阅读了几篇文章,例如 thisthisthis last one,这是最有帮助的,因为使用 SELECT DISTINCT 它确实只返回了 UNIQUE 值(因此排除了重复的值),但反之亦然到我想要的,它也没有返回 A 列和 B 列的结果。当我知道数据库中有重复值时,前两篇文章中的建议只是不断返回空结果。

希望有人能帮忙?

【问题讨论】:

    标签: mysql database sqlite


    【解决方案1】:

    您可以进行查询,首先根据该特定列获取所有重复值,然后检索该重复值中的记录。

    您的查询应该是这样的:

    SELECT Column_A, Column_B, Column_C
    FROM your_table 
    WHERE Column_C IN (
        SELECT Column_C
        FROM your_table
        GROUP BY Column_C
        HAVING COUNT(*) > 1)
    

    【讨论】:

    • 非常感谢!这是完美的,完全符合我第一次的需要。我花了几个小时试图找到答案,你在几分钟内就完成了。非常感谢,谢谢。
    【解决方案2】:

    您可以像这样使用GROUP BY 语句:

    SELECT A, B, C
    FROM T 
    WHERE C IN (SELECT C
                FROM T
                GROUP BY C
                HAVING COUNT(*) > 1)
    

    【讨论】:

    • 这不会返回所有行。
    • @CL。你能进一步解释一下吗?
    • 对不起,我误读了您的 GROUP BY 子句。但此查询不会仅在 C 列中搜索重复项。
    • @CL。你说的对。我刚刚修正了我的答案以适应这个。
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2018-10-08
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多