Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/01/2012, 08:49
Avatar de cchaparro
cchaparro
 
Fecha de Ingreso: febrero-2009
Ubicación: Medellín
Mensajes: 80
Antigüedad: 15 años, 2 meses
Puntos: 2
Consulta INNER JOIN extraña para caso atípico

Saludos.

Aquí les traigo una consulta que no se como tratar.

Tengo 3 tablas:
USUARIOS
id_usuario
nombre
..........

VEHICULOS
id_vehiculo
vehiculo
.........

USU_VEHI
id_usuario
id_vehiculo

Un usuario puede tener varios vehículos, y un vehículo puede pertenecer a varios usuarios, por lo que relaciono con la tabla intermedia USU_VEHI, utilizando los “id” de cada tabla y hacer lo siguiente:

SELECT usuarios.*, vehiculos.* FROM usuarios INNER JOIN usu_vehi ON usuarios.id_usuario = usu_vehi.id_usuario INNER JOIN vehiculos ON vehículos.id_vehiculo = usu_vehi.id_vehiculo WHERE usuarios.id_usuario = '1'

Muestra los datos del usuario con “id = 1”, su nombre y los vehículos que tiene. Hasta aquí todo va bien.

El problema está en que se da la situación de que no todos los usuarios tienen vehículos; en cuanto hago la consulta para obtener solamente los datos de un usuario, así no tenga vehículo, me da resultado vacío, y necesito que me muestre los datos del usuario.

La relación es correcta, pero tiene esa particular situación y no se cómo resolverla; puedo ponerme a realizar las relaciones “a mano” con varias SELECT e ir mirando si tiene o no vehículo, pero esta BD es realmente mayor (apenas puse datos de ejemplo por si me pueden ayudar), y sin utilizar INNER JOIN se hará muy pesado e ineficaz el código, aunque funcione.

En la sintaxis de INNER JOIN no encuentro forma alguna de que en caso de existir una relación que no devuelva resultados, al menos deje los que sí encuentre, por ejemplo:

Si tiene vehículos:
1 - Carlos - Chevrolet
1 - Carlos - Mazda

Si no tiene:
1 - Carlos

Pero que al menos muestre los datos que sí localice; comprendo que si no se cumple la relación completa, no debe dar resultados sino vacío.

Mi pregunta es ¿cómo podría hacer lo que necesito con alguna forma que no quede muy pesada e ineficaz?.

Les agradezco mucho toda la ayuda que me puedan brindar.