16.12.2012, Vladimír Klaus, navštíveno 4046x

MS Access
SQL

Tento predikát slouží k odstranění celých duplicitních řádek, nikoli jen duplicitních hodnot. Pro porovnání nejprve vyzkoušíme použití DISTINCT pro zjištění všech křestních jmen zákazníků.

SELECT DISTINCT Jmeno FROM Zakaznici

SQL obrázek

Výsledek má 10 hodnot, což je správně, mezi zákazníky jsou dva Jaroslavové. Nyní zkusíme dotaz upravit.

SELECT DISTINCTROW Jmeno FROM Zakaznici

SQL obrázek

Vidíme dva zásadní rozdíly. Řádek je 11, což je i celkový počet zákazníků, protože tam opravdu nejsou žádní dva úplně stejní a navíc není výsledek seřazen. Vlastně jsme dosáhli téhož, jako při použití DISTINCT * (viz výše).

Mnohem lepší příklad použití je tento. Máme tabulku zákazníků a objednávek, přičemž platí, že jeden zákazník může mít více objednávek. Spojíme tabulky pomocí INNER JOIN a vypíšeme křestní jména zákazníků, kteří si už něco objednali.

SELECT DISTINCT Zakaznici.Jmeno FROM Objednavky
INNER JOIN Zakaznici ON Objednavky.IdZakaznika = Zakaznici.ID

SQL obrázek

Výsledek je sice korektní, ale není správný, protože zákazníků, kteří si něco objednali je 8, nikoliv 7. Díky uvedenému dotazu jsme totiž spojili 2 různé Jaroslavy. Upravíme tedy dotaz, aby se při porovnávání (vyřazování duplicit) díval na všechny atributy zákazníka.

SELECT DISTINCTROW Zakaznici.Jmeno FROM Objednavky
INNER JOIN Zakaznici ON Objednavky.IdZakaznika = Zakaznici.ID

SQL obrázek

Ano, to je už ono! Můžete namítnout, že stačilo porovnávat také příjmení, ale i zde mohou existovat stejně se jmenující zákazníci, a to i ve stejné ulici, ve stejném městě…

SELECT DISTINCT Zakaznici.Jmeno, Zakaznici.Prijmeni FROM…