Удаление дубликатов записей в таблице - PullRequest
1 голос
/ 06 января 2010

Учтите, что у меня есть таблица с именем A. В ней у меня есть только один столбец с именем mark. Имеет несколько дублированных значений. Как я могу удалить дубликаты значений без временной таблицы. И таблица должна содержать одно из дублированных значений.

Ответы [ 4 ]

1 голос
/ 06 января 2010

ВЫБРАТЬ * ОТ ВНУТРЕННЕГО СОЕДИНЕНИЯ А как Б ГДЕ A.marks = B.marks;

Здесь отображаются дублированные значения (если я не ошибаюсь), так что, может быть, вы можете сделать JOIN для УДАЛЕНИЯ?

РЕДАКТИРОВАТЬ: я просто попробую это, это не работает, у вас нет таблицы идентификаторов в вашей таблице? как:

SELECT *
FROM A INNER JOIN A as B ON A.marks = B.marks
WHERE  A.id != B.id;
0 голосов
/ 12 января 2010
WITH    q AS
        (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY marks ORDER BY marks) AS rn
        FROM    a
        )
DELETE
FROM    q
WHERE   rn > 1
0 голосов
/ 06 января 2010

Причина, по которой так трудно удалить дубликаты susantosh, заключается в том, что вы не определили ни одного ключа в своей таблице, так что делает какие-либо из ваших строк уникальными? Вам нужно будет взять основную книгу по дизайну стола и понять, что без какой-то уникальности вы сведете себя с ума, пытаясь что-либо выяснить.

Есть несколько вещей, которые вы можете сделать:

  1. SELECT DISTINCT marks FROM TableName INTO NewTableName
  2. GROUP BY определенных меток переместить их в другую таблицу и затем удалить предыдущую таблицу
  3. Добавьте столбец UNIQUE Identity (возможно, типа int), затем напишите код, чтобы избавиться от дубликатов

Это лишь некоторые из ваших вариантов, но без понимания основ проектирования таблиц вы будете сталкиваться с этой проблемой снова и снова.

0 голосов
/ 06 января 2010

Если в таблице две записи равны, я не уверен, как можно однозначно идентифицировать одну, чтобы удалить только этот элемент. Что вы можете сделать, это:

  • удалите оба, а затем добавьте один обратно, возможно, используя курсор или циклическую структуру.
  • выберите другую таблицу и сгруппируйте ее, чтобы не получить дубликаты, затем удалите все строки из оригинала и скопируйте их.
  • добавить столбец id в эту таблицу, заполнить его, затем вызвать:

    УДАЛИТЬ ИЗ А ГДЕ ( идентификатор не в (ВЫБЕРИТЕ МАКС (id) ИЗ GROUP BY имя) )

и вы можете удалить этот столбец впоследствии

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