![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 18.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich,
Potrzebuję porady kogoś kto siedzi w SQL i ma pomysł jak rozwiązać mój problem.... Mam w pracy bazę danych która ma 2mln rekordów!! bazę wgrywałem kilka dni partiami z różnych źródeł i muszę przeprowadzić deduplikację przed oddaniem jej do szefa. Baza składa się z około 35 kolumn i mogą zdarzyć się przypadki że rekordy mają taką samą nazwę, adres, nip, itd. różnią się tylko np. telefonem albo mailem. Jedynym co na pewno ich różni to numer id w bazie... jedynym (moim)zdaniem sposobem jest usunięcie rekordów które są identyczne w całości wykluczając pole ID czy zna ktoś przepis na takie zapytanie?? coś w stylu -- usuń rekord jeżeli rekord minus [pole id] istnieje w bazie. ps. wykonanie kopii bazy i porównanie odpada bo zajęło by to co najmniej 2 dni! |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Wiem, że powinno działać, dlatego pytam (IMG:style_emoticons/default/smile.gif)
Kod mysql> SHOW VARIABLES LIKE "version";
+---------------+--------+ | Variable_name | Value | +---------------+--------+ | version | 5.5.16 | +---------------+--------+ 1 row in set (0.00 sec) mysql> CREATE TABLE test ( -> a INT, -> b INT, -> c INT -> ) ENGINE=innodb; Query OK, 0 rows affected (0.10 sec) mysql> INSERT INTO `test` VALUES (1,2,3), (1,2,4), (2,3,3), (2,4,4), (2,4,5); Query OK, 5 rows affected (0.11 sec) Records: 5 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM `test`; +------+------+------+ | a | b | c | +------+------+------+ | 1 | 2 | 3 | | 1 | 2 | 4 | | 2 | 3 | 3 | | 2 | 4 | 4 | | 2 | 4 | 5 | +------+------+------+ 5 rows in set (0.00 sec) mysql> ALTER IGNORE TABLE `test` ADD UNIQUE INDEX (a, b); ERROR 1062 (23000): Duplicate entry '1-2' for key 'a' Ten post edytował sowiq 12.10.2012, 13:07:27 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 21:41 |