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

Duda con consulta en mysql

Estas en el tema de Duda con consulta en mysql en el foro de Mysql en Foros del Web. Hola amigos tengo una duda por que se repiten mis datos en esta consulta? las dos tablas estan relacionacionadas pero no se por que cuando ...
  #1 (permalink)  
Antiguo 25/10/2015, 11:46
Avatar de joseanguiano  
Fecha de Ingreso: agosto-2015
Ubicación: Coatzacoalcos
Mensajes: 87
Antigüedad: 8 años, 7 meses
Puntos: 1
Duda con consulta en mysql



Hola amigos tengo una duda por que se repiten mis datos en esta consulta? las dos tablas estan relacionacionadas pero no se por que cuando la ejecuta me muesrta los datos repetidos en realidad en la tabla se muestran dos registros y la ejecuccion de esta consulta se multiplica dos veces por ejemplo tengo 2 registros me muestran 4 registros por que sera




http://imgur.com/zvRIasb
http://imgur.com/66gzy6D
__________________
Lo fácil, ya lo hice, lo difícil lo estoy haciendo y lo imposible, me tardare pero lo lograre.

Última edición por joseanguiano; 25/10/2015 a las 11:57 Razón: a
  #2 (permalink)  
Antiguo 25/10/2015, 14:42
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, 4 meses
Puntos: 2658
Respuesta: Duda con consulta en mysql

Estas haciendo un JOIN incondicional, con lo que te devolverá N × M registros.
Es el comportamiento normal y esperado de un JOIN de esa clase.
Como mínimo deberás indicar cual es la relación entre las tablas, que campo con que campo, o MySQL los relacionará por nombre del mismo, sin importar los datos que contengan y así el resultado será incorrecto.
__________________
¿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 25/10/2015, 15:30
Avatar de joseanguiano  
Fecha de Ingreso: agosto-2015
Ubicación: Coatzacoalcos
Mensajes: 87
Antigüedad: 8 años, 7 meses
Puntos: 1
Respuesta: Duda con consulta en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Estas haciendo un JOIN incondicional, con lo que te devolverá N × M registros.
Es el comportamiento normal y esperado de un JOIN de esa clase.
Como mínimo deberás indicar cual es la relación entre las tablas, que campo con que campo, o MySQL los relacionará por nombre del mismo, sin importar los datos que contengan y así el resultado será incorrecto.
Hola gnzsoloyo gracias por contestar, no es que abuse de tu confianza pero podrias regalarme algun ejemplo de como podría quedar como tu me comentas no entiedo como es lo que me dices puedes ayudarme ? saludos
__________________
Lo fácil, ya lo hice, lo difícil lo estoy haciendo y lo imposible, me tardare pero lo lograre.
  #4 (permalink)  
Antiguo 25/10/2015, 15:51
Avatar de joseanguiano  
Fecha de Ingreso: agosto-2015
Ubicación: Coatzacoalcos
Mensajes: 87
Antigüedad: 8 años, 7 meses
Puntos: 1
Respuesta: Duda con consulta en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Estas haciendo un JOIN incondicional, con lo que te devolverá N × M registros.
Es el comportamiento normal y esperado de un JOIN de esa clase.
Como mínimo deberás indicar cual es la relación entre las tablas, que campo con que campo, o MySQL los relacionará por nombre del mismo, sin importar los datos que contengan y así el resultado será incorrecto.

Hola de nuevo amigo gnzsoloyo he leido un poco mas y he intentado esto que te parece?

Código MySQL:
Ver original
  1. SELECT entrada.clave_t_e,entrada.fecha_entrada,fotografia_entrada.clave_t_e,fotografia_entrada.dpi,fotografia_entrada.archivo
  2. FROM entrada INNER JOIN fotografia_entrada
  3. ON entrada.clave_t_e = fotografia_entrada.clave_t_e
  4. WHERE entrada.clave_t_e !=''order by fotografia_entrada.clave_t_e ASC

Lo he probado y corre bien en mysql Workbench

Código HTML:
Notas algo inconcluso saludos
__________________
Lo fácil, ya lo hice, lo difícil lo estoy haciendo y lo imposible, me tardare pero lo lograre.
  #5 (permalink)  
Antiguo 25/10/2015, 16:08
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, 4 meses
Puntos: 2658
Respuesta: Duda con consulta en mysql

Vamos por el principio:
Cita:
Hola amigos tengo una duda por que se repiten mis datos en esta consulta?
Comencemos por aclarar un detalle: EN BBDD se considera que un resultado contiene registros duplicados si Y SÓLO SI todos los campos devueltos entre dos registros cualesquiera contiene valores que se repiten entre ellos. Pero si al menos UNO de los campos o columnas contiene un valor diferente al otro registro, eso NO ES REPETICIÓN.

¿Se entiende?

Esto implica que si tuvieses este resultado:
Cita:
A B C D E F G H
A B C D F F G H
A B C D E F J H
eso no es repeticion, por cuanto en los tres registros hay un campo que es diferente a los otros dos.

¿Eso se cumple en tu caso?

Por lo demas, en tu query ahora estaria relativamente bien, excepto por esa condicion "entrada.clave_t_e !='" que no estoy seguro de que cosa representa, ya que si es ese campo es PK, no podr'ia tener nunca un valor como ese, ni tampoco podria valer NULL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 25/10/2015, 16:35
Avatar de joseanguiano  
Fecha de Ingreso: agosto-2015
Ubicación: Coatzacoalcos
Mensajes: 87
Antigüedad: 8 años, 7 meses
Puntos: 1
Respuesta: Duda con consulta en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Vamos por el principio:
Comencemos por aclarar un detalle: EN BBDD se considera que un resultado contiene registros duplicados si Y SÓLO SI todos los campos devueltos entre dos registros cualesquiera contiene valores que se repiten entre ellos. Pero si al menos UNO de los campos o columnas contiene un valor diferente al otro registro, eso NO ES REPETICIÓN.

¿Se entiende?

Esto implica que si tuvieses este resultado:

eso no es repeticion, por cuanto en los tres registros hay un campo que es diferente a los otros dos.

¿Eso se cumple en tu caso?

Por lo demas, en tu query ahora estaria relativamente bien, excepto por esa condicion "entrada.clave_t_e !='" que no estoy seguro de que cosa representa, ya que si es ese campo es PK, no podria tener nunca un valor como ese, ni tampoco podria valer NULL.
Me ha quedado claro, mas sin embargo como podria yo traer registros de un solo usuario con clave_t_e como podria ser esa sentencia, que solo me muestren los datos correspodientes a su clave y no me muestre todos los registros

y gracias por ejemplo de ayya arriba me ha quedado claro amigo
__________________
Lo fácil, ya lo hice, lo difícil lo estoy haciendo y lo imposible, me tardare pero lo lograre.
  #7 (permalink)  
Antiguo 25/10/2015, 16:49
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, 4 meses
Puntos: 2658
Respuesta: Duda con consulta en mysql

Cita:
Iniciado por joseanguiano Ver Mensaje
Me ha quedado claro, mas sin embargo como podria yo traer registros de un solo usuario con clave_t_e
Eso es una duda que puedes resolver leyendo el manual básico...
Si ya tienes el valor de la clave que buscas, pues simplemente lo usas:
Código MySQL:
Ver original
  1.   E.clave_t_e,
  2.   E.fecha_entrada,
  3.   F.dpi,
  4.   F.archivo
  5. FROM entrada E INNER JOIN fotografia_entrada F
  6. ON E.clave_t_e = F.clave_t_e
  7. WHERE E.clave_t_e = valorBuscado;

Varios consejos:
1) Usa alias para los nombres de las tablas. Evitarás codigos confusos.
2) NO uses relaciones en el WHERE que no puedan cumplirse. Si el campo es PK y FK en la segunda tabla, es imposible que un INNER JOIN devuelva algo que no contenga esos valores. Poner una condicón del WHERE para buscar otra cosa que no sea la clave es una pérdida de tiempo.
3) SI ambos campos (PK / FK) contienen el mismo valor, no tiene sentido poner ambos campos en la salida del SELECT. Con uno sólo alcanza.
4) Si el campos de ordenamiento tendrá siempre el mismo valor, porque ese es el que se busca, ¿qué sentido tiene poner el ORDER BY?
Puedo seguir, pero por el momento alcanza.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 25/10/2015, 18:20
Avatar de joseanguiano  
Fecha de Ingreso: agosto-2015
Ubicación: Coatzacoalcos
Mensajes: 87
Antigüedad: 8 años, 7 meses
Puntos: 1
Respuesta: Duda con consulta en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso es una duda que puedes resolver leyendo el manual básico...
Si ya tienes el valor de la clave que buscas, pues simplemente lo usas:
Código MySQL:
Ver original
  1.   E.clave_t_e,
  2.   E.fecha_entrada,
  3.   F.dpi,
  4.   F.archivo
  5. FROM entrada E INNER JOIN fotografia_entrada F
  6. ON E.clave_t_e = F.clave_t_e
  7. WHERE E.clave_t_e = valorBuscado;

Varios consejos:
1) Usa alias para los nombres de las tablas. Evitarás codigos confusos.
2) NO uses relaciones en el WHERE que no puedan cumplirse. Si el campo es PK y FK en la segunda tabla, es imposible que un INNER JOIN devuelva algo que no contenga esos valores. Poner una condicón del WHERE para buscar otra cosa que no sea la clave es una pérdida de tiempo.
3) SI ambos campos (PK / FK) contienen el mismo valor, no tiene sentido poner ambos campos en la salida del SELECT. Con uno sólo alcanza.
4) Si el campos de ordenamiento tendrá siempre el mismo valor, porque ese es el que se busca, ¿qué sentido tiene poner el ORDER BY?
Puedo seguir, pero por el momento alcanza.
Hola amigo te agradesco por brindar el apoyo te iva a contestar desde hace rato pero tube problemas con el internet gracias a tu codigo lo realice así un saludo y gracias nuevamente
Código MySQL:
Ver original
  1. drop procedure if exists innefotoentrada;
  2.  
  3. create procedure innefotoentrada(in clave_t_e int)
  4.  
  5.  
  6. SELECT entrada.clave_t_e,entrada.fecha_entrada,fotografia_entrada.clave_t_e,fotografia_entrada.dpi,fotografia_entrada.archivo
  7.  
  8. FROM entrada INNER JOIN fotografia_entrada
  9. ON entrada.clave_t_e = fotografia_entrada.clave_t_e
  10. WHERE entrada.clave_t_e = clave_t_e;

y gracias por tan buenos consejos amigo
__________________
Lo fácil, ya lo hice, lo difícil lo estoy haciendo y lo imposible, me tardare pero lo lograre.

Última edición por joseanguiano; 25/10/2015 a las 18:20 Razón: a

Etiquetas: tabla
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 04:50.