Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL LEFT JOIN duplica i risultati

No, va bene. Questo è solo uno dei rari casi in cui vuoi usare il DISTINCT parola chiave per rimuovere i duplicati.

In questo caso ciò è giustificato dal fatto che la logica della query è corretta, anche se restituisce più di una riga. Molte volte si può vedere l'uso di DISTINCT quando effettivamente la logica della query è sbagliata.

Nota a margine:

  • qualsiasi filtro su un riferimento di tabella che stai utilizzando in WHERE clausola diversa da IS NULL/IS NOT NULL farebbe qualsiasi LEFT JOIN su questa stessa tabella si fa riferimento a un INNER JOIN , come per il comportamento del set di risultati finale. (vedi questo:https://stackoverflow.com/a/15483895/1291428 )
  • non dovresti usare GROUP BY per simulare l'effetto di DISTINCT , per 2 motivi:

    1/ Questo non è lo scopo. Uno degli effetti di GROUP BY è eliminare i duplicati, ma il suo scopo principale è raggruppare le righe secondo un determinato insieme di criteri, al fine di applicare su di esse alcuni calcoli/operazioni analitiche.

    2/ GROUP BY anche ORDER BY i risultati (in mysql), che non è necessariamente quello che vuoi e in tal caso rallenta l'esecuzione. Per favore, assicurati solo un uso appropriato di ciò che forniscono i motori, è sempre meglio dal punto di vista della compatibilità futura. (anticipando che ciò che includi come concesso in realtà non lo è)

saluti.