Ver Mensaje Individual
  #4 (permalink)  
Antiguo 24/04/2012, 08:39
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 selectiva

Hola computer_si:

Creo que la consulta podría simplificarse un poco, checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+------+------+---------+
  3. | reg  | ref  | mov  | imp     |
  4. +------+------+------+---------+
  5. |    1 | A1   | 1    |  500.00 |
  6. |    2 | A2   | 1    |  200.00 |
  7. |    3 | A3   | 1    |  300.00 |
  8. |    4 | A4   | 1    |  500.00 |
  9. |    5 | A5   | 1    | 4500.00 |
  10. |    6 | A1   | 2    |  500.00 |
  11. |    7 | A6   | 1    |  500.00 |
  12. |    8 | A5   | 2    | 4500.00 |
  13. +------+------+------+---------+
  14. 8 rows in set (0.00 sec)
  15.  
  16.  
  17. mysql> SELECT * FROM tabla T1 WHERE
  18.     -> (T1.mov = '1' AND NOT EXISTS (
  19.     -> SELECT reg FROM tabla T2
  20.     -> WHERE T1.ref = T2.ref AND T1.imp = T2.imp AND T2.mov = '2'));
  21. +------+------+------+--------+
  22. | reg  | ref  | mov  | imp    |
  23. +------+------+------+--------+
  24. |    2 | A2   | 1    | 200.00 |
  25. |    3 | A3   | 1    | 300.00 |
  26. |    4 | A4   | 1    | 500.00 |
  27. |    7 | A6   | 1    | 500.00 |
  28. +------+------+------+--------+
  29. 4 rows in set (0.00 sec)
  30.  
  31. mysql> SELECT * FROM tabla T1 WHERE
  32.     -> (T1.mov = '1' AND NOT EXISTS (
  33.     -> SELECT reg FROM tabla T2
  34.     -> WHERE T1.ref = T2.ref AND T1.imp = T2.imp AND T2.mov = '2')) OR
  35.     -> (T1.mov = '2' AND NOT EXISTS (
  36.     -> SELECT reg FROM tabla T2
  37.     -> WHERE T1.ref = T2.ref AND T1.imp = T2.imp AND T2.mov = '1'));
  38. +------+------+------+--------+
  39. | reg  | ref  | mov  | imp    |
  40. +------+------+------+--------+
  41. |    2 | A2   | 1    | 200.00 |
  42. |    3 | A3   | 1    | 300.00 |
  43. |    4 | A4   | 1    | 500.00 |
  44. |    7 | A6   | 1    | 500.00 |
  45. +------+------+------+--------+
  46. 4 rows in set (0.00 sec)

La segunda consulta sería para considerar que existan registros con mov = 2 pero sin mov = 1 aunque según tu lógica de negocio no sé si esto pueda ocurrir.

Saludos
Leo