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

Qualcuno può aiutare a spiegare perché non usare un SQL JOIN è una cattiva pratica e sbagliato?

È vero che entrambe le forme di sintassi dovrebbero dare lo stesso risultato e internamente MySQL le esegue entrambe esattamente allo stesso modo. Le versioni attuali dello standard SQL supportano entrambi i moduli, sebbene lo stile virgola sia supportato solo per motivi di compatibilità con le versioni precedenti.

C'è un caso in cui l'utilizzo della sintassi in stile virgola non riesce, ma è esotico:

SELECT * FROM A, B JOIN C ON C.x = A.y;

Il JOIN l'operatore ha una precedenza maggiore della virgola. Quindi, poiché la query precedente sta cercando di valutare C.x = A.y non sa nemmeno che A fa parte della query. Quindi ottieni un errore:

ERROR 1054 (42S22): Unknown column 'A.y' in 'on clause'

Il miglior rimedio è usare il JOIN sintassi in modo coerente invece di mescolarli.

Inoltre, non puoi creare join esterni con la sintassi virgola-join. Oracle e Sybase/Microsoft hanno inventato ciascuno la propria sintassi proprietaria per la gestione degli outer join, ma nessuno dei due è supportato da altri marchi di RDBMS. Oggi, tutte le versioni correnti di RDBMS, inclusi Oracle e Sybase/Microsoft, supportano lo standard JOIN sintassi, quindi non c'è un buon motivo per utilizzare le estensioni specifiche del fornitore legacy.