|
![]() | Strana 16 (LIMIT) | ![]() | Sbírka příkladů SQL dotazů |
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.
![]() | Strana 16 (LIMIT) | ![]() | Sbírka příkladů SQL dotazů |