Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/04/2013, 07:15
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: Consulta con if

Hay algunas consideraciones a tu problema:
- Si estás relacionando esas tablas así, es porque en Comunidades están las FK de las otras dos (Provincias y Categorías), pero si eso fuese cierto entonces jamás podrías tener un valor cero (0) en esos campos, a menos que hubiese en esas tablas un valor cero como PK (cosa bastante extraña).
- Si existe un registro cero, bien podrías resolver el problema poniendo un caracter vacío en ese registro y asunto terminado (es una forma de forzar la solución).
- Si no existe un registro cero, esa consulta no te debería devolver registros donde no haya relaciones entre las tres tablas.
- Si Comunidades te acepta un cero en esos campos, y no existe registro con ID cero en tus tablas referidas, entonces estás usando tablas MyISAM y no InnoDB, o al menos no estás declarando las FK, con lo que la integridad que tienes es nula, y los resultados pueden ser catastróficos...

Ahora bien, es técnicamente posible hacer lo que pides, siempre y cuando no uses un JOIN implícito, sino un LEFT JOIN, pero eso en tu ejemplo tiene un problema fundamental: Tu relación es en estrella y no en cadena.
Una relación en estrella es cuando una tabla principal se conecta a otras secundarias, sin que estas secundarias se relacionen entre si.
B <-- A --> C
El problema es que el LEFT JOIN devuelve todo lo de la primera tabla (la de la izquierda) tenga o no relación con la de la derecha. Y como estarías intentando hacer lo mismo dos veces, existe la altísima probabilidad de que devuelva registros duplicados, ya que se generará un producto cartesiano.
Esto pasa porque en la tercera lugar de tomar para el cálculo la tabla derivada entre Comunidad y Provincia, estarías relacionando nuevamente Comunidad con Categorías, sin tener en cuenta el resultado del primer par, lo que sumaría registros de ambos segmentos.

En definitiva, es posible de hacer, pero la consulta es algo elaborada, pero antes sería bueno que verifiquemos:

- ¿Qué tipo de tablas usas?
- ¿Están creadas las FK?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)