Ne, to je v pořádku. Toto je jen jeden z mála případů, kdy chcete použít DISTINCT
klíčové slovo pro odstranění duplikátů.
V tomto případě je to odůvodněno tím, že logika dotazu je správná, i když vrací více než jeden řádek. Mnohokrát je možné vidět použití DISTINCT
když je ve skutečnosti logika dotazu špatná.
Vedlejší poznámka:
- jakýkoli filtr v odkazu na tabulku, který používáte, v
WHERE
jiná klauzule nežIS NULL/IS NOT NULL
způsobí jakékoliLEFT JOIN
na stejné tabulce přejděte naINNER JOIN
, pokud jde o chování konečných výsledků. (viz toto:https://stackoverflow.com/a/15483895/1291428 ) -
neměli byste používat
GROUP BY
pro simulaci efektuDISTINCT
, ze 2 důvodů:1/ To není účel. Jeden z efektů
GROUP BY
je odstranit duplicity, ale jeho hlavním účelem je seskupovat řádky podle určitého souboru kritérií, aby se na nich mohly aplikovat některé analytické výpočty/operace.2/
GROUP BY
takéORDER BY
výsledky (v mysql), což není nutně to, co chcete, a v takovém případě zpomaluje provádění. Prosím, jen zajistěte vhodné využití toho, co motory poskytují, to je z hlediska dopředné kompatibility vždy lepší. (předpokládá se, že to, co zahrnete jako udělené, ve skutečnosti není)
s pozdravem.