为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL SELECT只是非空值

MySQL SELECT只是非空值

白衣染霜花 2019-08-16 14:36:58
MySQL SELECT只是非空值是否可以执行只接受NOT NULL值的select语句?现在我正在使用这个:SELECT * FROM table然后我必须用php循环过滤掉空值。有办法吗?SELECT * (that are NOT NULL) FROM table?现在,当我选择*我得到val1,val2,val3,null,val4,val5,null,null等....但我只是想得到我的结果中不为null的值。这可能没有过滤循环吗?
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

你应该用IS NOT NULL。(比较操作符=<>两个给UNKNOWNNULL于表达的任一侧)。

SELECT * FROM table WHERE YourColumn IS NOT NULL;

为了完整起见,我会提到在MySQL中你也可以否定null安全等式运算符,但这不是标准的SQL。

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

编辑以反映评论。听起来您的桌子可能不是第一种正常形式,在这种情况下,更改结构可能会使您的任务更容易。其他几种做法虽然......

SELECT val1 AS valFROM  your_tableWHERE val1 IS NOT NULLUNION ALLSELECT val2 
FROM  your_tableWHERE 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 valFROM   your_table        /*CROSS JOIN*/
       JOIN (SELECT 1 AS idx                   UNION ALL
                   SELECT 2) tHAVING val IS NOT NULL  /*Can reference alias in Having in MySQL*/


查看完整回答
反对 回复 2019-08-16
?
浮云间

TA贡献1829条经验 获得超4个赞


您可以筛选出特定列中包含NULL值的行:


SELECT col1, col2, ..., coln

FROM yourtable

WHERE somecolumn IS NOT NULL

如果要过滤掉任何列中包含null的行,请尝试以下操作:


SELECT col1, col2, ..., coln

FROM yourtable

WHERE col1 IS NOT NULL

AND col2 IS NOT NULL

-- ...

AND coln IS NOT NULL

更新:根据您的意见,也许你想要这个?


SELECT * FROM

(

    SELECT col1 AS col FROM yourtable

    UNION

    SELECT col2 AS col FROM yourtable

    UNION

    -- ...

    UNION

    SELECT coln AS col FROM yourtable

) T1

WHERE col IS NOT NULL

我对Martin说,如果你需要这样做,那么你应该改变你的数据库设计。


查看完整回答
反对 回复 2019-08-16
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

Select * from your_table 
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;

这种方法的唯一缺点是你只能比较5列,之后结果总是假的,所以我只比较可以的字段NULL


查看完整回答
反对 回复 2019-08-16
  • 3 回答
  • 0 关注
  • 1207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信