是否可以执行只接受NOT NULL值的select语句?
现在我用的是:
SELECT * FROM table
然后我必须用php循环过滤掉空值.
有没有办法做到:
SELECT * (that are NOT NULL) FROM table
?
现在当我 Select *时,我得到val1,val2,val3,null,val4,val5,null,null等等....但我只想得到结果中不为空的值.这在不使用循环过滤的情况下是可能的吗?
是否可以执行只接受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
.(比较运算符=
和<>
在表达式的两侧都给出UNKNOWN
和NULL
.)
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*/