Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/06/2012, 10:27
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Excluir registros en consulta

Hola d0va:

No me quedó claro qué es lo que necesitas, pero veamos si esto es más o menos lo que quieres...

Supongamos que tienes dos tablas así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM colores;
  2. +----------+
  3. | color    |
  4. +----------+
  5. | rojo     |
  6. | verde    |
  7. | amarillo |
  8. +----------+
  9. 3 rows in set (0.01 sec)
  10.  
  11. mysql> SELECT * FROM otros_colores;
  12. +-------+
  13. | color |
  14. +-------+
  15. | rojo  |
  16. | verde |
  17. +-------+
  18. 2 rows in set (0.00 sec)

Estas pueden ser el resultado de tus consultas... ahora, para obtener la "resta", como mencionas, puedes hacerla de varias formas...

Código MySQL:
Ver original
  1. mysql> #utilizando NOT EXISTS
  2. mysql> SELECT * FROM colores c
  3.     -> WHERE NOT EXISTS (
  4.     -> SELECT * FROM otros_colores oc
  5.     -> WHERE oc.color = c.color);
  6. +----------+
  7. | color    |
  8. +----------+
  9. | amarillo |
  10. +----------+
  11. 1 row in set (0.02 sec)
  12.  
  13. mysql> #utilizando NOT IN
  14. mysql> SELECT * FROM colores c
  15.     -> WHERE color NOT IN (
  16.     -> SELECT color FROM otros_colores);
  17. +----------+
  18. | color    |
  19. +----------+
  20. | amarillo |
  21. +----------+
  22. 1 row in set (0.00 sec)
  23.  
  24. mysql> #Utilizando LEFT JOIN
  25. mysql> SELECT c.* FROM colores c
  26.     -> LEFT JOIN otros_colores oc ON oc.color = c.color
  27.     -> WHERE oc.color IS NULL;
  28. +----------+
  29. | color    |
  30. +----------+
  31. | amarillo |
  32. +----------+
  33. 1 row in set (0.00 sec)

En lo particular prefiero la opción del NOT EXISTS, ya que esta te permite comparar contra más de un campo, mientras que la opción del NOT IN sólo se compara un campo a la vez.

Saludos
Leo.