sql >> Databáze >  >> RDS >> Mysql

MySQL LEFT JOIN duplikuje výsledky

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ékoli LEFT JOIN na stejné tabulce přejděte na INNER 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 efektu DISTINCT , 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.



  1. Funkce rozdělení v SQL Server 2008

  2. PostgreSQL date() s časovým pásmem

  3. Jaký je ekvivalent PostgreSQL pro ISNULL()

  4. Maven - java.lang.ClassNotFoundException:com.mysql.jdbc.Driver