Запросы к базе данных или базе данных для дубликатов записей в одном столбце - PullRequest
3 голосов
/ 30 июня 2010

При доступе к MS, как получить «ID» записей с дублированным содержимым в столбце «myData»?

что-то вроде:

----------------------             ------------------------         
  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» и количество вхождений, при добавлении чего-либо еще произойдет сбой при выполнении. (и без идентификаторов)

OR

Говоря, что я обращаюсь к БД как к DataTable в C #, как это сделать? Особенно, когда в этой таблице ~ 2000 записей.

(может быть, некоторая помощь о том, как работать с INTERSECT , чтобы он возвращал полные строки с дубликатами в одном столбце)

Спасибо.

Ответы [ 4 ]

2 голосов
/ 30 июня 2010
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)
1 голос
/ 30 июня 2010

Просто выбросить это туда ...

SELECT distinct
    f.ID,
    f.myData
FROM 
    fooDB f
    inner join fooDB f2 on f.myData = f2.myData
        and f.ID <> f2.ID
1 голос
/ 30 июня 2010

Я не знаю, можете ли вы сделать подзапрос в 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
    )
0 голосов
/ 30 июня 2010

Попробуйте

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)

Делитесь и наслаждайтесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...