Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/04/2012, 08:35
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Consulta mysql!

Hola de nuevo andruxand:

Vayamos por partes.

Primero, por la forma en que estás poniendo tus tablas en el FROM y los JOIN's se está realizando un producto cartesiano entre tus tablas usuario y radicado... no tienes definida ninguna condición de unión entre estas tablas. Lamentablemente no nos pones cual es la estructura de cada una de tus tablas, por lo tanto no estoy seguro de los campos que tengas que poner en la unión.

No es recomendable que mezcles JOIN'S y uniones explícitas (tablas separadas por comas) en tus consultas... Trata de usar siempre JOIN's del tipo que necesites, además de que son más rápidos que las uniones explícitas, es más fácil darte cuenta cuando falta definir algún criterio.

En lugar de poner algo como esto:

Código:
FROM
usuario u, radicado r 
LEFT JOIN licencias l on l.id_radicado = r.id_radicado
Trata siempre de poner las consultas así:

Código:
FROM 
usuario u
INNER JOIN radicado r ON u.id_usuario = r.id_usuario
LEFT JOIN licencias l on l.id_radicado = r.id_radicado
Pongo la condición ON en rojo porque es justamente la unión que falta definir, es decir por qué campos están relacionadas las tablas usuario y radicado.

Ahora bien, pasando a tu problema, como te comenté en el post pasado tienes muchas formas de obtener la consulta que quieres, utilizando NOT IN, NOT EXISTS o LEFT y/o RIGTH JOIN's... observa este ejemplo.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +----------+-------------+
  3. | idTabla1 | descripcion |
  4. +----------+-------------+
  5. |        1 | uno         |
  6. |        2 | dos         |
  7. |        3 | tres        |
  8. |        4 | cuatro      |
  9. +----------+-------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tabla2;
  13. +----------+----------+---------+
  14. | idTabla2 | idTabla1 | estatus |
  15. +----------+----------+---------+
  16. |        1 |        1 |       1 |
  17. |        2 |        2 |       0 |
  18. |        3 |        3 |    NULL |
  19. +----------+----------+---------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT * FROM tabla1 WHERE idTabla1 NOT IN
  23.     -> ( SELECT idTabla1 FROM tabla2
  24.     ->   WHERE estatus != 0 AND estatus IS NOT NULL
  25.     -> );
  26. +----------+-------------+
  27. | idTabla1 | descripcion |
  28. +----------+-------------+
  29. |        2 | dos         |
  30. |        3 | tres        |
  31. |        4 | cuatro      |
  32. +----------+-------------+
  33. 3 rows in set (0.06 sec)
  34.  
  35. mysql> SELECT * FROM tabla1 WHERE NOT EXISTS
  36.     -> ( SELECT idTabla1 FROM tabla2
  37.     ->   WHERE estatus != 0 AND estatus IS NOT NULL
  38.     ->   AND tabla1.idTabla1 = tabla2.idTabla1
  39.     -> );
  40. +----------+-------------+
  41. | idTabla1 | descripcion |
  42. +----------+-------------+
  43. |        2 | dos         |
  44. |        3 | tres        |
  45. |        4 | cuatro      |
  46. +----------+-------------+
  47. 3 rows in set (0.00 sec)
  48.  
  49. mysql> SELECT tabla1.*, tabla2.* FROM tabla1
  50.     -> LEFT JOIN tabla2 ON tabla1.idTabla1 = tabla2.idTabla2
  51.     -> WHERE tabla2.estatus = 0 OR tabla2.estatus IS NULL;
  52. +----------+-------------+----------+----------+---------+
  53. | idTabla1 | descripcion | idTabla2 | idTabla1 | estatus |
  54. +----------+-------------+----------+----------+---------+
  55. |        2 | dos         |        2 |        2 |       0 |
  56. |        3 | tres        |        3 |        3 |    NULL |
  57. |        4 | cuatro      |     NULL |     NULL |    NULL |
  58. +----------+-------------+----------+----------+---------+
  59. 3 rows in set (0.00 sec)

Observa que el único registro que se está excluyendo de la tabla1 es el idTabla1 = 1, ya que este tiene un estatus 1 en la tabla2... el registro 2 EXISTE EN LA TABLA2, pero tiene un estatus 0. El registro 3 EXISTE EN LA TABLA 2, pero tiene un estatus null. El registro 4 NO EXISTE EN LA TABLA2.

Dale un vistazo y cualquier duda la comentas en el foro.

Saludos
Leo.