Tema: Una fácil
Ver Mensaje Individual
  #6 (permalink)  
Antiguo 11/09/2010, 05:00
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: 17 años, 2 meses
Puntos: 2658
Respuesta: Una fácil

Por lo que dices, tienes una relación al menos que es mandatoria (usuarios - vehículos), pero otra que es opcional (vehiculo - remolque).
Para responder tu pregunta necesitamos obtener precisamente aquellos casos en que un vehículo no esté relacionado con ningún remolque, y ese "ninguno" se expresa en un NULL en la segunda relación. Como el INNER JOIN requiere la existencia de una relación válida entre las tablas vinculadas, no sirve para este caso, en esa se debe usar LEFT JOIN y en aquellos en que el campo remolque.id_vehiculo sea NULL serán los que estás buscando.

Es decir:
Código MySQL:
Ver original
  1.    v.marca,
  2.    v.modelo,
  3.    u.nombre,
  4.    u.email,
  5.    u.id_usuario
  6.    vehiculo v
  7.    INNER JOIN usuarios u ON v.id_usuario = u.id_usuario
  8.    LEFT JOIN remolque r ON v.id_vehiculo = r.id_vehiculo
  9.    r.id_vehiculo IS NULL
  10.    v.estado = 'Seminuevo' AND
  11.    v.combustible = 'Diesel'
  12. ORDER BY v.fecha DESC;

Lo que debes entender, para comprender por qué un "!=" no funciona, es que NULL no es un valor. NULL se suele definir como un puntero a la nada. Es un estado. Y ese estado determina la inexistencia, la nada, por tanto no es comparable lógicamente.
En programación eso se representa por Nothing o Null, y no se puede usar un operador lógico para determinarlo porque un operador requiere que se compare con algo que existe, con una instancia de algo y ese no es el caso de 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)