Запрос, который удаляет дублирующуюся запись с помощью mysql

0

Вопрос

Моя цель-создать запрос, который удаляет дублирующуюся запись в строке с помощью MySQL 5.7. Моя текущая функция сопоставляет записи с одинаковым весом, однако у нее есть дубликат. (Пожалуйста, смотрите 2-ю таблицу)

Вот моя таблица ввода.

entryID| entryName  | weight |
-------------------------------
1      | lamok2     | 1970 |
2      | lamok2     | 1955 |
3      | lamok3     | 1965 |
4      | lamok3     | 1975 |
5      | lamok3     | 1985 |
6      | lamok4     | 1955 |
7      | lamok4     | 1960 |
8      | lamok4     | 1975 |
9      | lamok5     | 1955 |
10     | MA1        | 2000 |
11     | MA2        | 2010 |

После применения моего запроса, который:

SELECT t1.entryName  AS mname, t1.weight AS weight,
        MIN(t2.entryName) AS wname,MIN(t2.weight) AS weight
FROM entry t1
LEFT JOIN entry t2 ON t1.weight = t2.weight AND t1.entryName != t2.entryName
GROUP BY t1.entryID, t1.entryName, t1.weight

it produces this:

mname| weight | wname  | weight| 
--------------------------------------------
lamok2 | 1970 | NULL   | NULL   |
lamok2 | 1955 | lamok4 | 1955   |
lamok3 | 1965 | NULL   | NULL   |
lamok3 | 1975 | lamok4 | 1975   |
lamok3 | 1985 | NULL   | NULL   |
lamok4 | 1955 | lamok2 | 1955   |
lamok4 | 1960 | NULL   | NULL   |
lamok4 | 1975 | lamok3 | 1975   |
lamok5 | 1955 | lamok2 | 1955   |
MA1    | 2000 | NULL   | NULL   |
MA2    | 2010 | NULL   | NULL   |

Как мы видим по результату, Lamok 2 and Lamok 4 had a 2 matches Lamok 3 and Lamok 4 had a 2 matches too... Это не должно быть возможно... Это считается дублирующим боем. Как я могу избежать такого рода дублирования в своем запросе?

Это мой целевой результат: (Никаких повторяющихся боев)

 mname| weight | wname  | weight| 
    --------------------------------------------
    lamok2 | 1970 | NULL   | NULL   |
    lamok2 | 1955 | lamok4 | 1955   |
    lamok3 | 1965 | NULL   | NULL   |
    lamok3 | 1975 | lamok4 | 1975   |
    lamok3 | 1985 | NULL   | NULL   |
    lamok4 | 1960 | NULL   | NULL   |
    lamok5 | 1955 | lamok2 | 1955   |
    MA1    | 2000 | NULL   | NULL   |
    MA2    | 2010 | NULL   | NULL   |
database mysql
2021-11-24 05:26:19
1

Лучший ответ

0

Я думаю, что вам нужно сгруппироваться по двум столбцам, по entryName и weight.

Таким образом, этот запрос вернет ваши дубликаты:

SELECT *
FROM entry
GROUP BY entryName, weight
HAVING COUNT(*) > 1

Когда вы найдете дубликаты, вы можете удалить их. Если вы хотите удалить их с помощью запроса, то вы можете использовать что-то вроде этого:

DELETE FROM entry
WHERE entryID IN (
    SELECT e.entryID 
    FROM entry AS e
    GROUP BY e.entryName, e.weight
    HAVING COUNT(*) > 1
)
2021-11-24 09:08:29

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................