没有空字符串和 NULL 的 mysql 不同值

标签 mysql sql

如何在没有空字符串值和NULL值的情况下检索mysql不同的值

SELECT 
DISTINCT CON.EMAILADDRESS AS 'E-MAIL'
FROM  STUDENT
INNER JOIN CONTACT CON ON STUDENT.CONTACT_ID = CON.ID
WHERE
(CON.EMAILADDRESS IS NOT NULL 
OR  CON.EMAILADDRESS !=' ');

但在输出中仍然收到空电子邮件。无法弄清楚我做错了什么。

最佳答案

您唯一的问题是您使用 OR 而不是 AND。

让我们看一下值为NULL的情况:

  • CON.EMAILADDRESS 不为空 => FALSE
  • CON.EMAILADDRESS != ' ' => NULL

假或空 => 空。由于条件不会导致 TRUE,因此您不会选择 NULL。

如果该值为空字符串 ''、' ' 或任何长度:

  • CON.EMAILADDRESS 不为空 => TRUE
  • CON.EMAILADDRESS != ' ' => FALSE

真或假 => 真。您选择空字符串。

我想这就是让您感到困惑的地方:尽管错误地使用了 OR 而不是 AND,您仍然删除了一些空字符串,但不是全部。

所以:

WHERE CON.EMAILADDRESS IS NOT NULL AND CON.EMAILADDRESS != ' ';

或者,因为任何字符串 != '' 都不能为 NULL(NULL != '' => NULL,不是 TRUE),只需:

WHERE CON.EMAILADDRESS != '';

关于没有空字符串和 NULL 的 mysql 不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28169612/

相关文章:

php - 如何维护一页中所有字段的审计日志

java - 没有选择数据库 GAE

c# - 使用 ADO.NET 从 SQL Server 获取数据

mysql - 将 MySQL 十进制转换为可接受的格式以便能够对其进行序列化

SQL 查询让 child 拥有相同数量的玩具

MySql触发器,在插入之前删除同一个表中的一行

mysql查询仅列出数据库中的大写行

用于游戏服务器的 C++ MySQL

sql - 查询中的多个最大值

mysql - 为什么在oracle中引入散列分区?有什么好处