Ver Mensaje Individual
  #6 (permalink)  
Antiguo 18/11/2011, 12:08
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: select * where "no campo vacío" no funciona

Hola a todos:

Vayamos por partes... estamos olvidando que en BD un campo nulo NO ES LO MISMO QUE UNA CADENA VACIA, es decir, no es lo mismo poner correo = '' a poner correo = null. observen este script:

Código MySQL:
Ver original
  1. mysql> create table tabla (nombre varchar(10), correo varchar(50));
  2. Query OK, 0 rows affected (0.19 sec)
  3.  
  4. mysql> INSERT INTO tabla VALUES ('uno', '[email protected]'),
  5.     -> ('dos', ''), ('tres', NULL);
  6. Query OK, 3 rows affected (0.03 sec)
  7. Records: 3  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * FROM tabla;
  10. +--------+-------------+
  11. | nombre | correo      |
  12. +--------+-------------+
  13. | uno    | [email protected] |
  14. | dos    |             |
  15. | tres   | NULL        |
  16. +--------+-------------+
  17. 3 rows in set (0.00 sec)
  18.  
  19. mysql> SELECT * FROM tabla WHERE correo = '';
  20. +--------+--------+
  21. | nombre | correo |
  22. +--------+--------+
  23. | dos    |        |
  24. +--------+--------+
  25. 1 row in set (0.00 sec)
  26.  
  27. mysql> SELECT * FROM tabla WHERE correo IS NULL;
  28. +--------+--------+
  29. | nombre | correo |
  30. +--------+--------+
  31. | tres   | NULL   |
  32. +--------+--------+
  33. 1 row in set (0.00 sec)
  34.  
  35. mysql> SELECT * FROM tabla WHERE correo = '' OR correo IS NULL;
  36. +--------+--------+
  37. | nombre | correo |
  38. +--------+--------+
  39. | dos    |        |
  40. | tres   | NULL   |
  41. +--------+--------+
  42. 2 rows in set (0.00 sec)

Si observan en el insert en un caso estoy asignando '' al correo, mientras que en otro envío la palabra reservada NULL, en los select's que están debajo se observa entonces los diferentes comportamientos, finalmente la última consulta con la cláusula OR traería todos los registros que tengan asignado una cadena vacía ('') o un valor nulo (NULL)

Saludos
Leo.