多个WHERE IS NOT NULL查询返回空行

时间:2017-10-14 11:41:52

标签: mysql sql null where

我尝试仅选择表格中包含name_durchgefuehrtname_abgelehntname_offen列中的值以及ID的行。

但是查询会提供所有列,而不仅仅是值。

这是我的问题:

SELECT id, name_durchgefuehrt, name_abgelehnt, name_offen 
FROM dashboard 
WHERE 
    name_durchgefuehrt IS NOT NULL  
    AND name_abgelehnt IS NOT NULL  
    AND name_offen IS NOT NULL

结果:

enter image description here

编辑:

是的我知道这对你们大多数人来说都是一个简单的问题,但我对“Null”的价值有一个错误的理解,我认为我必须这样做。

无论如何,谢谢你的所有答案。

3 个答案:

答案 0 :(得分:2)

NULL不是''(空字符串),它是一个可以使用IS NULL进行测试的特殊状态。

<> ''会排除NULL''

所以:

SELECT id,name_durchgefuehrt,name_abgelehnt,name_offen 
FROM dashboard 
WHERE 
    name_durchgefuehrt <> '' 
    AND 
    name_abgelehnt <> '' 
    AND 
    name_offen <> ''

答案 1 :(得分:1)

你必须检查你的值是否也是空字符串,它不一定是空值

答案 2 :(得分:1)

我想注意一个字符串也可以包含空格的空格。因此,摆脱空间的更通用的方法是:

SELECT id, name_durchgefuehrt, name_abgelehnt, name_offen 
FROM dashboard 
WHERE TRIM(name_durchgefuehrt) <> '' AND
      TRIM(name_abgelehnt) <> '' AND
      TRIM(name_offen) <> '' IS NOT NULL;

由于存在隐藏字符,您可能希望使用正则表达式。例如,如果您有一组空格字符:

SELECT id, name_durchgefuehrt, name_abgelehnt, name_offen 
FROM dashboard 
WHERE name_durchgefuehrt regexp '[^[:space]]' AND
      name_abgelehnt regexp '[^[:space]]' AND
      name_offen regexp '[^[:space]]';