Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

por qu'e inner join aqu'i?

Estas en el tema de por qu'e inner join aqu'i? en el foro de Bases de Datos General en Foros del Web. UPDATE tablaA INNER JOIN ( tablaB INNER JOIN tablaC ON (tablaB.Alias=tablaC.Alias) AND (tablaB.TempRepDate=tablaC.PlayDate) ) ON (tablaA.[Client Login]=tablaB.[loginName]) AND (tablaA.[Client Login]=tablaB.[loginName]) SET tablaB.campo = ([0]+((tablaB.Originalcampo-[0])*(1-[0]))) WHERE ...
  #1 (permalink)  
Antiguo 14/07/2010, 05:00
 
Fecha de Ingreso: noviembre-2008
Mensajes: 65
Antigüedad: 15 años, 5 meses
Puntos: 0
por qu'e inner join aqu'i?

UPDATE tablaA
INNER JOIN (
tablaB
INNER JOIN tablaC
ON (tablaB.Alias=tablaC.Alias)
AND (tablaB.TempRepDate=tablaC.PlayDate)
)
ON (tablaA.[Client Login]=tablaB.[loginName])
AND (tablaA.[Client Login]=tablaB.[loginName])
SET tablaB.campo = ([0]+((tablaB.Originalcampo-[0])*(1-[0])))
WHERE (((tablaB.Updated)=No));

No entiendo por qu'e usa inner join aqu'i. No ser'i alo mismo que hacer lo siguiente?

UPDATE tablaB SET campo = ([0]+((tablaB.Originalcampo-[0])*(1-[0])));

Gracias!
  #2 (permalink)  
Antiguo 14/07/2010, 05:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: por qu'e inner join aqu'i?

Código MySQL:
Ver original
  1. UPDATE tablaB SET campo = ([0]+((tablaB.Originalcampo-[0])*(1-[0])));
Ejecutaría la actualización de ese campo en todos los registros de la tabla sin discriminar, mientras que INNER JOIN hace que sólo se apliquen en aquellos registrso que cumplen con la relación indicada por INNER JOIN, además del WHERE.

¿Entiendes bien el uso de JOIN / INNER JOIN / LEFT JOIN / RIGHT JOIN?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/07/2010, 05:57
 
Fecha de Ingreso: noviembre-2008
Mensajes: 65
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: por qu'e inner join aqu'i?

Primero de todo mil gracias.

El tema es que la condici'on es como hacer un exists, no?

es actualiza la tablaA los registros que est'en relacionados con tablaB que, a su vez, est'en relacionados con tablaC.

es algo as'i?

Me he liado entre inner join y left join y claro, me sal'ian todos los registros.
  #4 (permalink)  
Antiguo 14/07/2010, 06:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: por qu'e inner join aqu'i?

Cita:
El tema es que la condici'on es como hacer un exists, no?
No. Es un matching 1:1 entre registros de dos tablas. La condición sólo indica qué campos se deben igualar.
la diferencia es la implementación interna de las dos cosas. En un caso (EXISTS) realiza comparaciones entre valores de tablas leídas. En el INNER JOIN el matching se realiza a medida que se lee, y habitualmente por medio de índices, cuando se trata de campos clave o contenidos en un índice definido sobre alguna de las tablas.
Son cosas invisibles al usuario.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/07/2010, 08:02
 
Fecha de Ingreso: noviembre-2008
Mensajes: 65
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: por qu'e inner join aqu'i?

Vale, eso cuando yo o estudi'e lo hac'ia as'i

UPDATE tablaA a, tablaB b, tablaC c
SET b.campo = ([0]+((b.Originalcampo-[0])*(1-[0])))
WHERE b.Alias = c.Alias
AND b.TempRepDate=c.TempRepDate
AND a.`Client Login`=b.`loginName`;

Es lo mismo? S'olo lo har'ia en los que cumplieran la condici'on, qu eno es otra que tener correspondencia en varios campos de otras dos tablas.

Gracias de nuevo
  #6 (permalink)  
Antiguo 14/07/2010, 08:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: por qu'e inner join aqu'i?

No. No es lo mismo.
El uso de la coma hará que las tablas se relacionen por los campos del mismo nombre, lo que puede dar lugar a que se crucen campos incompatibles y eso genere un producto cartesiano.
Es mucho mejor usar INNER JOIN con la condición y no dejar que cruce todo para luego filtrar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 14/07/2010, 09:00
 
Fecha de Ingreso: noviembre-2008
Mensajes: 65
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: por qu'e inner join aqu'i?

Eso no lo entiendo: uso los alias (entiendo que te refieres a con "la coma") precisamente para que no haya problema.

Es que he le'ido en m'as de un sitio que inner join, join y lo que hago yo hace exactamente lo mismo. D'onde podr'ia encontrar algo masticable para un no experto en sql sobre las diferencias t'ecnicas?
  #8 (permalink)  
Antiguo 14/07/2010, 09:05
 
Fecha de Ingreso: noviembre-2008
Mensajes: 65
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: por qu'e inner join aqu'i?

adem'as, aparte de que pueda ser raro, el resultado es el mismo?
  #9 (permalink)  
Antiguo 14/07/2010, 09:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: por qu'e inner join aqu'i?

Cita:
Eso no lo entiendo: uso los alias (entiendo que te refieres a con "la coma") precisamente para que no haya problema.
Los alias suplantan el nombre, nada más. La coma es una coma y es sinónimo de JOIN, pero no funciona en MySQL exactamente de la misma forma...

Cita:
Es que he le'ido en m'as de un sitio que inner join, join y lo que hago yo hace exactamente lo mismo. D'onde podr'ia encontrar algo masticable para un no experto en sql sobre las diferencias t'ecnicas?
Lo que te estoy aportando no es de tutorial: Es experiencia práctica con bases de datos relacionales y de estudios formales.

En términos generales un INNER JOIN, un JOIN y la coma (,) hacen lo mismo: una junta de tablas. Pero MySQL exige el ON o el USING con el INNER JOIN, por lo que operan de formas levemente distintas. Y ese "levemente" es donde radica la diferencia.
Por otra parte, en MySQL la ubicación de las tablas (de izquierda a derecha) y la forma de indicar el ON afecta el resultado.

Respecto a tutoriales, simplemente explora con Google y encontrarás muchísimas explicaciones. SI no ,tienes experiencia en el tema del INNER JOIN, cualquiera te servirá mas o menos igual...

Tip final: Cambia el teclado declarado a ES o deja de usar el apóstrofe. Eso no es el acento y los posts se leen muy mal.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: join
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:57.