【问题标题】:Querying a database or a datatable for duplicate records in one column在数据库或数据表中查询一列中的重复记录
【发布时间】:2010-06-29 20:16:02
【问题描述】:

MS访问时,如何获取“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# 中将数据库作为 DataTable 访问,如何管理这个?特别是当这个表有大约 2000 条记录时。

(也许对如何使用 INTERSECT 有一些帮助,让它返回在一列上有重复的完整行)

谢谢。

【问题讨论】:

    标签: c# sql database ms-access datatable


    【解决方案1】:
    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)
    

    【讨论】:

      【解决方案2】:

      我不知道你是否可以像这样在 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
          )
      

      【讨论】:

        【解决方案3】:

        把这个扔出去……

        SELECT distinct
            f.ID,
            f.myData
        FROM 
            fooDB f
            inner join fooDB f2 on f.myData = f2.myData
                and f.ID <> f2.ID
        

        【讨论】:

          【解决方案4】:

          试试

          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)
          

          分享和享受。

          【讨论】:

          • 非常感谢,但您在第一个 SELECT 语句中错过了“myData”,修复了它,它可以工作了。
          猜你喜欢
          • 2015-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-12
          • 1970-01-01
          相关资源
          最近更新 更多