Удаление дублирующейся записи от таблицы - SQL-запрос

Во-первых, против аргументов в пользу создания Вашего собственного:

Желание 'съесть наш собственный корм для собак' с точки зрения некоторой внутренне созданной веб-платформы

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

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

Необходимость в некотором узкоспециализированном отчете или способности настроить некоторую функцию некоторым предположительно уникальным способом

, Поскольку другие сказали, захватывают одно из многих прекрасных средств отслеживания с открытым исходным кодом и настраивают его.

Вера, что не трудно создать систему отслеживания ошибок

ну, я записал первую версию моего BugTracker.NET только за несколько недель, начиная ни с какого предшествующего знания C#. Но теперь, 6 лет и пара тысячи несколько часов спустя, существует все еще большой список отмененных запросов новых функций, таким образом, все это зависит от того, что Вы хотите, чтобы система отслеживания ошибок сделала. Сколько почтовой интеграции, интеграции управления исходным кодом, полномочий, рабочий процесс, время, отслеживая, планирует оценку и т.д. Средство отслеживания ошибки может быть главным, основным приложением.

, Какие аргументы Вы могли бы использовать для поддержки покупки существующей системы отслеживания ошибок?

не должны покупать. Слишком много хороших с открытым исходным кодом: Trac, Mantis_Bug_Tracker, мой собственный BugTracker.NET, для именования некоторых.

, В частности, какие опции звучат легкими, но оказываются твердыми реализовать, или являются трудными и важными, но часто пропущены?

при создании его просто сами, тогда можно взять много ярлыков, потому что можно соединить вещи проводами. Если Вы создаете его для большого количества различных пользователей в большом количестве различных сценариев, то это - поддержка конфигурируемости, которая трудна. Настраиваемый рабочий процесс, пользовательские поля и полномочия.

я думаю две функции, которые хороший средство отслеживания ошибки должно иметь, это и , FogBugz и BugTracker.NET имеют, 1) интеграция и входящей электронной почты и исходящей почты, так, чтобы весь разговор об ошибке жил с ошибкой а не в отдельном почтовом потоке и 2) утилита для того, чтобы превратить снимок экрана в ошибку отправляет со справедливыми несколькими щелчки.

6
задан Brian Tompsett - 汤莱恩 4 July 2015 в 13:15
поделиться

6 ответов

Пожалуйста, попробуйте запрос ниже, он определенно будет соответствовать вашей цели

SET ROWCOUNT 1
DELETE test
FROM test a
WHERE (SELECT COUNT(*) FROM test b WHERE b.name = a.name) > 1
WHILE @@rowcount > 0
  DELETE test
  FROM test a
  WHERE (SELECT COUNT(*) FROM test b WHERE b.name = a.name) > 1
SET ROWCOUNT 0

, где test - имя вашей таблицы

12
ответ дан 8 December 2019 в 04:53
поделиться

Это работает в SQL Server, хотя это не один оператор:

Declare @cnt int; 
Select @cnt=COUNT(*) From DupTable Where (Col1=1);  -- Assumes you are trying to delete the duplicates where some condition (e.g. Col1=1) is true.
Delete Top (@cnt-1) From DupTable

Он также не требует каких-либо дополнительных предположений (например, о существовании другого столбца, который делает каждую строку уникальной). В конце концов, Сантану сказал, что строки были дубликатами, а не только один столбец.

Однако правильный ответ, на мой взгляд, состоит в том, чтобы получить реальную структуру таблицы . То есть добавьте в эту таблицу столбец IDENTITY, чтобы вы могли использовать одну команду SQL для выполнения своей работы. Примерно так:

ALTER TABLE dbo.DupTable ADD
    IDCol int NOT NULL IDENTITY (1, 1)
GO

Тогда удаление будет тривиальным:

DELETE FROM DupTable WHERE IDCol NOT IN 
   (SELECT MAX(IDCol) FROM DupTable GROUP BY Col1, Col2, Col3)
4
ответ дан 8 December 2019 в 04:53
поделиться

Если у вас есть идентификаторы строк, которые вы хотите удалить, то ...

DELETE FROM table WHERE id IN (1, 4, 7, [id numbers to delete...])
1
ответ дан 8 December 2019 в 04:53
поделиться

Я думаю, что каждая таблица имеет уникальный идентификатор. Итак, если он существует, вы можете написать следующий запрос: Удалить Table1 из Table1 t1, где 2> = (выбрать count (id) из Table1, где dupColumn = t1.dupColumn) и t1.id отсутствует (выберите max (id) из таблицы 1, где dupColumn = t1.dupColumn)

OOps. Кажется, можно использовать только второй фильтр Удалить Table1 из Table1 t1, где t1.id отсутствует (выберите max (id) из Table1, где dupColumn = t1.dupColumn)

1
ответ дан 8 December 2019 в 04:53
поделиться
DELETE FROM Table t1, Table t2 WHERE t1.colDup = t2.colDup AND t1.date < t2.date

Удаляет все повторяющиеся строки из таблицы (в столбце colDup ), кроме самой старой (т. Е.lowset дата ).

3
ответ дан 8 December 2019 в 04:53
поделиться
DELETE FROM `mytbl`
    INNER JOIN (
        SELECT 1 FROM `mytbl`
        GROUP BY `duplicated_column` HAVING COUNT(*)=2
    ) USING(`id`)

Редактировать:

Моя проблема, вышеуказанный запрос не работает.

Предполагаемая структура таблицы:

id int auto_increment

num int # <- это столбец с повторяющимися значениями

Следующий запрос будет работать в MySQL (я проверил):

DELETE `mytbl` FROM `mytbl` 
    INNER JOIN 
    (
        SELECT `num` FROM `mytbl`
        GROUP BY `num` HAVING COUNT(*)=2
    ) AS `tmp` USING (`num`)

Запрос удалит строки, которые имеют 2 (не более или иначе) повторяющихся значения в num столбец.

Edit (снова):

Я предлагаю добавить ключ в столбец num .

Edit (# 3):

В случае, если автор хотел удалить дублированные строки , следующее должно работать для MySQL (у меня это сработало):

DELETE `delete_duplicated_rows` FROM `delete_duplicated_rows`
    NATURAL JOIN (
        SELECT *
        FROM `delete_duplicated_rows`
        GROUP BY `num1` HAVING COUNT(*)=2
    ) AS `der`

Предполагая, что структура таблицы такая:

CREATE TABLE `delete_duplicated_rows` (
  `num1` tinyint(4) DEFAULT NOT NULL,
  `num2` tinyint(4) DEFAULT NOT NULL
) ENGINE=MyISAM;
2
ответ дан 8 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: