602SQL-Úplná dokumentace Index  

Sbírka dotazů – str. 17

Příklad 25

Zadání: Najděte duplicitní firmy (aby vznikla duplicita, vložte do tabulky Firmy alespoň jeden další záznam s již existujícím jménem firmy).

Popis řešení: Záznamy s tabulky Firmy seskupíme podle názvu firmy. Skupina obsahující duplicitní firmy bude mít více než 1 záznam. Stačí proto záznamy ve skupině spočítat pomocí agregační funkce COUNT a výsledek omezit jen na ty skupiny, které mají počet větší než 1.

SQL:

  SELECT Firmy.nazev, COUNT(*)
  FROM Firmy
  GROUP BY Firmy.nazev
  HAVING COUNT(*)>1

Poznámky:

a) Tímto dotazem získáme jména firem, která jsou v tabulce vícekrát. Nemůžeme ale data opravit, protože dotaz je needitovatelný. Editovatelného dotazu docílíme tím, že původní dotaz schováme do subdotazu a použijeme predikát IN.

  SELECT * FROM Firmy
  WHERE Firmy.nazev IN (SELECT Firmy.nazev
                        FROM Firmy
                        GROUP BY Firmy.nazev
                        HAVING COUNT(*)>1)

b) Je důležité, že subdotaz po IN musí mít pouze jeden sloupec (tj. musí být skalární), aby šlo porovnávat.

c) Tento dotaz je editovatelný a je možné tedy duplicitní záznam smazat nebo opravit.

d) Daní za editovatelnost je výrazné zpomalení vyhodnocení odpovědi.