Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Znalezienie duplikatów klucza
Forum PHP.pl > Forum > Bazy danych > Oracle
tvister
Problem dotyczy zapytania, które wyszukuje duplikaty klucza względem identyfikatora technicznego.
Optymalizacja danych nie wchodzi w gre. Indeksy są założone na id i na kolumnach klucza.
Być może ktoś ma pomysł jak to obejść np. kilkoma operacjami ewentualnie zna jakąś magię oracle-ową smile.gif
Poniżej prezentuje sposób ale dla kilkunastu kolumn należących do klucza jest niewydajny.
  1. SELECT ..... FROM table_name1 a WHERE EXISTS (
  2. SELECT count(1) FROM table_name2 b
  3. WHERE
  4. a.kolumna1 = b.kolumna1 OR (a.kolumna1 IS NULL AND b.kolumna1 IS NULL)
  5. AND
  6. a.kolumna2 = b.kolumna2 OR (a.kolumna2 IS NULL AND b.kolumna2 IS NULL)
  7. ...
  8. ..
  9. AND (a.id <> b.id)
  10. );


mmmmmmm
  1. SELECT kolumna1, kolumna2, ... FROM tabela GROUP BY kolumna1, kolumna2, ... HAVING Count(*)>1
tvister
To może inaczej.
Szukamy takiej sytuacji gdzie dla danego klucza zlożonego jest przypisany więcej niż jeden identyfiator oraz gdy dla danego
idetyfikatora jest przypisany więcej niż jeden klucz złożony. W wyniku interesują nas rekordy z tabeli a.

Może tą operacje można rozbić na mniejsze ?

Tak dla potomnych

dodałem kolumnę techniczną z konkatenacją kolumn klucza wraz z wybranym separatorem i wszystko hula szybko.

Temat do zamknięcia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.