Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/11/2014, 18:39
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Consulta datos a tres tablas da resultado repetido

Eso es porque estas haciendo un producto cartesiano.

En las condiciones del ON solo deben ir las relaciones entre tablas, en muy raros casos es necesario agregar otro tipo de condiciones alli, no obstante es posible.

En tu caso tendrías que hacer algo asi:
Código MySQL:
Ver original
  1.     t2.Nombre
  2.     t1
  3.     INNER JOIN t2 ON t1.Identificador_t2=t2.Id
  4.     INNER JOIN t3 ON t1.Identificador_t3=t3.Id
  5.     t1.Identificador_t3='$dato_venido_POST'

o eventualmente tambien podrias decir:
Código MySQL:
Ver original
  1.     t2.Nombre
  2.     t1
  3.     INNER JOIN t2 ON t1.Identificador_t2=t2.Id
  4.     INNER JOIN t3 ON (t1.Identificador_t3=t3.Id AND t3.Id='$dato_venido_POST')

si bien son equivalentes lo que cambia es la forma en que el motor las optimiza, ambas retornan lo mismo, pero con un volumen grande de resultados una correra mas rapido que la otra.

Lo importante es que recuerdes que SI O SI en el ON deben ir las relaciones entre tablas, luego las condiciones puedes ponerlas en el WHERE o en el caso de la segunda consulta, tambien en el ON pero vinculado de forma logica con la relacion entre las tablas.

Otra forma menos prolija de solventar tu problema es mediante el uso de DISTINCT:
Código MySQL:
Ver original
  1.     t2.Nombre
  2.     t1
  3.     INNER JOIN t2 ON t1.Identificador_t2=t2.Id
  4.     INNER JOIN t3 ON t1.Identificador_t3='$dato_venido_POST'

pero esa forma no te la recomiendo, si otra persona tiene que mantener ese codigo en el futuro te odiara.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios