代码之家  ›  专栏  ›  技术社区  ›  Hassen

在一列中查询数据库或数据表中的重复记录

  •  3
  • Hassen  · 技术社区  · 15 年前

    在MS Access上,如何获取“mydata”列中有重复内容的记录的“id”?

    比如:

    ----------------------             ------------------------         
      ID   |   myData    |             |   ID   |   myData    |   
    ----------------------             ------------------------
       1   |   AAA       |             |    1   |   AAA       |
    ----------------------             ------------------------
       2   |   BBB       |             |    5   |   AAA       |
    ----------------------    ==>      ------------------------
       3   |   CCC       |             |    2   |   BBB       |
    ----------------------             ------------------------
       4   |   BBB       |             |    4   |   BBB       |
    ----------------------             ------------------------
       5   |   AAA       |
    ----------------------             
    

    到目前为止,我能做的就是这个查询:

    SELECT        myData, COUNT(myData) AS Expr1
    FROM            fooDB
    GROUP BY myData
    HAVING        (COUNT(myData) > 1)
    

    它只返回“mydata”中重复记录的列表和出现次数,添加任何其他记录都将在执行时失败。(没有ID)

    说我在C中将数据库作为数据表访问,如何管理这个问题?尤其是当这张表有大约2000条记录时。

    (也许能帮上忙 横断 让它返回一列上有重复项的完整行)

    谢谢。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Tom H zenazn    15 年前

    我不知道您是否可以像这样在Access中执行子查询,但下面是一种典型的SQL方法:

    SELECT
        id,
        my_data
    FROM
        My_Table
    WHERE
        my_data IN
        (
            SELECT
                my_data
            FROM
                My_Table
            GROUP BY
                my_data
            HAVING
                COUNT(*) > 1
        )
    
        2
  •  2
  •   Justin K    15 年前
    SELECT ID, fooDB.myData
    FROM (
      SELECT myData
      FROM fooDB
      GROUP BY myData
      HAVING COUNT(myData) > 1
    ) t INNER JOIN fooDB ON (t.myData = fooDB.myData)
    
        3
  •  1
  •   dotjoe    15 年前

    把这个扔出去…

    SELECT distinct
        f.ID,
        f.myData
    FROM 
        fooDB f
        inner join fooDB f2 on f.myData = f2.myData
            and f.ID <> f2.ID
    
        4
  •  0
  •   Bob Jarvis - Слава Україні    15 年前

    尝试

    SELECT ID
      FROM fooDB
      WHERE myData IN (SELECT myData
                         FROM (SELECT myData, COUNT(myData) AS ROW_COUNT
                                 FROM fooDB
                                 GROUP BY myData)
                         WHERE ROW_COUNT > 1)
    

    分享和享受。

    推荐文章