Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/04/2009, 08:32
Avatar de gnzsoloyo
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: se duplican resultados!

El problema puede deberse a que usas a coma (,) en el FROM, lo que equivale a un NATURAL JOIN, y esto genera un producto cartesiano en alguna de las combinaciones.
En este sentido es siempre preferible usar INNER JOIN, LEFT JOIN o RIGHT JOIN, según se necesite, definiendo cuáles son los campos de relación. JOIN lo que hace es tratar de igualar todos los campos que lleven el mismo nombre en las tablas sometidas a la junta. Como esto puede ser que intente igualar campos del mismo nombre pero con contenidos distintos entre tablas, se produce el error.
El hecho de poner los campos de relación en el WHERE no es suficiente, no solamente porque MySQL no puede optimizar el WHERE, sino porque eso no te asegura que no haya habido duplicación de registros, ya que si el campo pivotado no es el ID que pusiste, la duplicación cumple de todos modos con el WHERE tal y como lo planteas.

Resumiendo:
Lo que debes hacer es:
Código sql:
Ver original
  1. SELECT *
  2. FROM inmuebles INNER JOIN inmuebles_claves USING(idinmueble) inmuebles_descripciones
  3.     INNER JOIN inmuebles_tipos  USING(idinmueble)
  4.     INNER JOIN tipos,inmuebles_poblaciones  USING(idinmueble)
  5.     INNER JOIN poblaciones  USING(idinmueble)
  6.     INNER JOIN inmuebles_zonas  USING(idinmueble)
  7. WHERE inmuebles.idcliente = 2 AND inmuebles.activo =1;
  8. ORDER BY inmuebles.precio

La cláusula USING funciona como el ON campo1 = campo2 cuand los campos en ambas tablas tienen el mismo nombre.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)