Jak napisać zapytanie SQL - usuwanie powielonych rekordów

0

Witajcie,
mam problem z napisaniem zapytania SQL.

Mój problem polega na tym, że w tabeli kr_configuration mam powielone rekordy w kolumnie name

Chciałbym prosić o pomoc w napisaniu takiego zapytania, które usunie powielane rekordy jeśli name == name.

Przykład:

  1. mam tabelę kr_configuration,
  2. w tej tabeli znajdują się kolumna name na podstawie, której widzę powielone pozycje,

--- przykład kolumny name:

color,
padding,
margin
padding
padding
padding
color

W tym wypadku chciałbym usunąć wszystkie powielane "padding" (zostawiając jeden oryginał).
To samo tyczy się "color" oraz innych pozycji -> zostawiamy jeden oryginał.

Prosiłbym o pomoc doświadczonych użytkowników.

0

Dla MSSQL.

  WITH CTE AS(
   SELECT id, name, row = ROW_NUMBER() OVER(PARTITION BY name ORDER BY name)
   FROM kr_configuration
)
DELETE FROM CTE WHERE row > 1

select * from kr_configuration

0

@mariano901229: dziękuję za odpowiedź.
Ja posiadamy chyba MySQL (przepraszam, nie posiadam praktycznie żadnej wiedzy w tej tematyce).
Jak wprowadzę ten kod, który został przesłany to otrzymuję komunikat:

/ Błąd SQL (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CTE AS(
SELECT id, name, ROW = ROW_NUMBER() OVER(PARTITION BY name ORDER BY ' at line 1 /
/
Affected rows: 0 Znalezionych wierszy: 0 Ostrzeżenia: 0 Czas przetwarzania 0 of 1 query: 0,000 sec. /

1
 DELETE t1 FROM kr_configuration t1, kr_configuration t2 
WHERE t1.id > t2.id AND t1.name = t2.name
0

@mariano901229: teraz otrzymałem taki komunikat:
/* Błąd SQL (1054): Unknown column 't1.id' in 'where clause' /
/
Affected rows: 0 Znalezionych wierszy: 0 Ostrzeżenia: 0 Czas przetwarzania 0 of 1 query: 0,000 sec. */

Czy t1.id powinienem zastąpić pierwszą kolumną t1.id_configuration ? (bo taka istnieje w tej tabeli ? i jest numerowana wg kolejności ?)

0

@mariano901229: Witam, jestem Ci wdzięczny za pomoc. Próbowałem wykonać polecenie, które zostało przesłane ale wszystko staje w miejscu, zawiesza się.. być może to polecenie generuje duże obciążenie i mój localhost nie daje rady ?

W tej tabeli mam około 4000 rekordów, czy problem jest w czymś innym ?


Na serwerze również to polecenie zawiesza całość, nawet po 2h nie ma żadnych zmian w tabeli / tabela się nie ładuje, jakby była uszkodzona.

0

@mariano901229: W czym może być problem ? czy to zapytanie jest ciężkie do wykonania ? czy może jest tam błąd ? Prosiłbym o informację, zaakcetpuję poprawną odpowiedź aby inni użytkownicy mogli skorzystać z tego rozwiązania.

// Jarosław H. jest u Ciebie na zdjęciu ? ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1