En un MySQL JOIN, ¿cuál es la diferencia entre ONy USING()? Por lo que puedo decir, USING()es una sintaxis más conveniente, mientras que ONpermite un poco más de flexibilidad cuando los nombres de columna no son idénticos. Sin embargo, esa diferencia es tan pequeña que pensarías que simplemente la eliminarían USING().
¿Hay más en esto de lo que parece? En caso afirmativo, ¿qué debo usar en una situación dada?

usingtiene otro uso además de las uniones. Ver stackoverflow.com/a/13750399/632951Respuestas:
Es principalmente azúcar sintáctico, pero hay un par de diferencias notables:
ON es el más general de los dos. Uno puede unir tablas EN una columna, un conjunto de columnas e incluso una condición. Por ejemplo:
USING es útil cuando ambas tablas comparten una columna del mismo nombre exacto en el que se unen. En este caso, uno puede decir:
Un buen regalo adicional es que uno no necesita calificar completamente las columnas de unión:
Para ilustrar, para hacer lo anterior con ON , tendríamos que escribir:
Observe la
film.film_idcalificación en laSELECTcláusula. Sería inválido decirlofilm_idya que eso crearía una ambigüedad:En cuanto a
select *, la columna de unión aparece en el conjunto de resultados dos veces con,ONmientras que solo aparece una vez conUSING:fuente
USINGinterpretaON.USING(categoría,field_id,)que es útil cuando se une mediante claves primarias compuestas, también escuché que el optimizador sí usaUSINGpara mejorar el rendimiento en algunos casosUSINGuna definición MySQL o es estándar?Pensé que me pondría aquí cuando me haya parecido
ONmás útil queUSING. Es cuandoOUTERuniones se introducen en las consultas.ONse beneficia de permitir que el conjunto de resultados de la tabla a la que seOUTERune una consulta se restrinja mientras se mantiene laOUTERunión. Intentar restringir los resultados establecidos mediante la especificación de unaWHEREcláusula, efectivamente, cambiará laOUTERunión en unINNERunión.De acuerdo, esto puede ser un caso relativo de esquina. Vale la pena poner por ahí aunque .....
Por ejemplo:
fuente
usingofrece, no se puede combinar con otros predicados:select*from t join t2 using(i) and on 1no funcionaría.where hasAirport ;- Qué significa esto ? no hay valor para comparar.SELECT * FROM country LEFT JOIN city ON country.countryId=city.countryId AND city.city BETWEEN 'C' AND 'E'enumerará todos los países, pero solo las ciudades que comienzan con C o D (si corresponde). (Más ciudades llamadas 'E')Wikipedia tiene la siguiente información sobre
USING:Tablas de las que estaba hablando:
La documentación de Postgres también los define bastante bien:
fuente
Para aquellos que experimentan con esto en phpMyAdmin, solo una palabra:
phpMyAdmin parece tener algunos problemas con
USING. Para el registro, esto es phpMyAdmin ejecutado en Linux Mint, versión: "4.5.4.1deb2ubuntu2", Servidor de base de datos: "10.2.14-MariaDB-10.2.14 + maria ~ xenial - distribución binaria mariadb.org".He ejecutado
SELECTcomandos usandoJOINyUSINGen phpMyAdmin y en Terminal (línea de comando), y los de phpMyAdmin producen algunas respuestas desconcertantes:1) una
LIMITcláusula al final parece ser ignorada.2) el supuesto número de filas según se informa en la parte superior de la página con los resultados a veces es incorrecto: por ejemplo, se devuelven 4, pero en la parte superior dice "Mostrando filas 0 - 24 (2503 en total, la consulta tomó 0.0018 segundos). "
Iniciar sesión en mysql normalmente y ejecutar las mismas consultas no produce estos errores. Tampoco se producen estos errores al ejecutar la misma consulta en phpMyAdmin usando
JOIN ... ON .... Presumiblemente un error phpMyAdmin.fuente