sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la diferencia entre usar y en las uniones de tablas en MySQL?

No uso la sintaxis USING, ya que

  1. la mayoría de mis uniones no son adecuadas para él (no es el mismo nombre de campo que se está comparando y/o hay varias coincidencias en la unión) y
  2. no es inmediatamente obvio a qué se traduce en el caso de más de dos tablas

es decir, asumiendo 3 tablas con las columnas 'id' e 'id_2', no

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

convertirse

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 algo más otra vez?

Descubrir esto para una versión de base de datos en particular es un ejercicio bastante trivial, pero no tengo mucha confianza en que sea consistente en todas las bases de datos, y no soy la única persona que tiene que mantener mi código (por lo que el otras personas también tendrán que saber a qué equivale).

Una diferencia obvia con WHERE vs ON es si la combinación es externa:

Asumiendo un T1 con un solo campo de ID, una fila que contiene el valor 1 y un T2 con un campo de ID y VALOR (una fila, ID=1, VALOR=6), entonces obtenemos:

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

no da filas, ya que se requiere que coincida DONDE, mientras que

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

dará una fila con los valores

1, NULL, NULL

ya que ON solo se requiere para hacer coincidir la combinación, que es opcional debido a que es externa.