Cita:
Iniciado por barbarisa Gracias Gnzsoloyo por la respuesta.
Efectivamente el campo ID solo me aparece una vez.
Estoy haciendo pruebas y parece que la siguiente ejecucion mysql es mas rapida que con INNER JOIN ... USING... a pesar de que me devuelve la $row[] con los 3 ID del mismo valor:
select * from tabla_1, tabla_2, tabla_3 where tabla_1.id=$num and tabla_2.id=$num and tabla_3.id=$num
Saludos
Si, es posible, aunque el uso de la coma (",") es un sinónimo de JOIN, por lo cual debería funcionar igual si la escribes:
Código sql:
Ver originalSELECT *
FROM tabla_1 JOIN tabla_2 JOIN tabla_3
WHERE tabla_1.id=num AND tabla_2.id=num AND tabla_3.id=num ]
Pero la cosa adolece de algunos problemas:
1.
Requiere que solamente sean iguales los nombres de los campos con el mismo tipo de dato. En otras palabras, si en las Tabla1, Tabla2 y Tabla3 existe un campo "ID" los igualará. Pero si la relación de Tabla1.ID es con Tabla2.IdTabla1, no lo hará. Esa vinculación se hace con el ON solamente. Además, si existen otros campos, por ejemplo "nombre", en las tablas y que no están estrictamente vinculados, a MySQL no le importará, los tratará de igualar de todos modos.
Para que se entienda el problema: Supongamos que exista una tabla USUARIOS(ID,NOMBRE) y otra DEPARTAMENTO_USUARIO(ID,NOMBRE,ID_USUARIO), donde DEPARTAMENTO_USUARIO.NOMBRE es el nombre del departamento. Se puede hacer sin problema:
Código sql:
Ver originalSELECT *
FROM USUARIO, DEPARTAMENTO_USUARIO;
Pero esa consulta te devolverá los usuarios que tengan
el mismo ID que el departamento y se llamen
igual que el departamento... lo que no tiene sentido.
Como forma de consulta es rápida, pero eso no significa que sea correcta o lógica.
2. Poner la condición de igualación en el WHERE es
muy ineficiente, porque el parser de MySQL
no puede optimizar el WHERE y si puede hacerlo con el FROM. Por eso se recomienda hacer un
Código sql:
Ver originalSELECT *
FROM tabla_1 JOIN tabla_2 ON tabla_1.id = tabla_2.id JOIN tabla_3 ON tabla_2.id = tabla_3.id
y no la forma que estás usando. Si lo que quieres después es restringir a un sólo ID, bien puedes hacer
Código sql:
Ver originalSELECT *
FROM tabla_1 JOIN tabla_2 ON tabla_1.id = tabla_2.id JOIN tabla_3 ON tabla_2.id = tabla_3.id
WHERE id = num;
Eso te dará mejores resultados.
3. El JOIN (o su sinónimo, la coma)
pueden ser rápidos cuando se trata de pocas tablas y pocos registros, pero como se trata de una junta natural, produce en definitiva un
producto cartesiano, lo que si cruzas tres tablas de 1.000 registros, implica procesar 1000.000.000 de registros en memoria. Por eso existe en INNER JOIN: Sólo procesa los puntos de coincidencia y no lee el resto de los registros; en cambio el JOIN
lee todo, combina y recién entonces selecciona...