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

Qual è la differenza tra l'utilizzo e l'attivazione di join in tabelle in MySQL?

Non uso la sintassi USING, poiché

  1. la maggior parte dei miei join non è adatta (non lo stesso nome di campo che viene abbinato e/o più corrispondenze nel join) e
  2. non è immediatamente ovvio cosa si traduce nel caso con più di due tabelle

cioè supponendo 3 tabelle con le colonne 'id' e 'id_2', fa

T1 JOIN T2 USING(id) JOIN T3 USING(id_2)

diventare

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)

o

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)

o qualcos'altro ancora?

Scoprirlo per una particolare versione del database è un esercizio abbastanza banale, ma non ho molta certezza che sia coerente in tutti i database e non sono l'unica persona che deve mantenere il mio codice (quindi il anche altre persone dovranno essere consapevoli di cosa equivale).

Un'ovvia differenza con WHERE e ON è se il join è esterno:

Assumendo un T1 con un campo ID singolo, una riga contenente il valore 1 e un T2 con un campo ID e VALUE (una riga, ID=1, VALUE=6), otteniamo:

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42

non fornisce righe, poiché WHERE deve corrispondere, mentre

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)

darà una riga con i valori

1, NULL, NULL

poiché l'ON è richiesto solo per la corrispondenza del join, che è facoltativo poiché è esterno.