是否可以执行只接受NOT NULL值的select语句?

现在我用的是:

SELECT * FROM table

然后我必须用php循环过滤掉空值.

有没有办法做到:

SELECT * (that are NOT NULL) FROM table

?

现在当我 Select *时,我得到val1,val2,val3,null,val4,val5,null,null等等....但我只想得到结果中不为空的值.这在不使用循环过滤的情况下是可能的吗?

推荐答案

你应该用IS NOT NULL.(比较运算符=<>在表达式的两侧都给出UNKNOWNNULL.)

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

为了完整起见,我要提到的是,在MySQL中,你也可以否定null safe equality operator,但这不是标准的SQL.

SELECT *
FROM table 
WHERE NOT (YourColumn <=> NULL);

编辑以反映 comments .听起来你的桌子可能不是第一种正常形式,在这种情况下,改变 struct 可能会让你的任务更容易.不过还有其他几种方法...

SELECT val1 AS val
FROM  your_table
WHERE val1 IS NOT NULL
UNION ALL
SELECT val2 
FROM  your_table
WHERE val2 IS NOT NULL
/*And so on for all your columns*/

上述方法的缺点是,它会针对每一列对表进行多次扫描.下面的代码可能可以避免这种情况,但我还没有在MySQL中测试过.

SELECT CASE idx
         WHEN 1 THEN val1
         WHEN 2 THEN val2
       END AS val
FROM   your_table
        /*CROSS JOIN*/
       JOIN (SELECT 1 AS idx
                   UNION ALL
                   SELECT 2) t
HAVING val IS NOT NULL  /*Can reference alias in Having in MySQL*/

Mysql相关问答推荐

金融交易的交易隔离级别

如何在使用VALUES()插入时指定jOOQ中的行别名

MySQL:返回所有条件(但不满足其他条件)为真的所有结果

在MySQL中使用FIRST_VALUE()

如何在 MySQL 中对同一个表的多个列进行 INNER JOIN

MySQL 8.0.33 Select json列时出现错误:排序内存不足,请考虑增加服务器排序缓冲区大小

Mysql 查询返回未定义的 node.js

Mysql如何分行分词

有没有比使用 MySQL 计划事件更好的方法来更新我的数据库表中的列?

为什么没有创建此触发器?

从三个不同的表中生成两列,并使用分组变量计算这些列的比率

如何使用 express.js 和 react.js 删除连接表中的元素和关联元素

如何在 MYSQL 中使用多个表进行插值

基于 2 列的重复行的 SQL 查询

在 MySQL 中 Select COUNT of MAX

使用 MySQL 在树中查找 Leaf

MySQL查询根据同一表中其他字段的值更新表中的字段

在 MySQL 中检测 utf8 损坏的字符

MySQL获取两个值之间的随机值

匹配 IN 子句中的所有值