3 回答
TA贡献1906条经验 获得超3个赞
你应该用IS NOT NULL
。(比较操作符=
和<>
两个给UNKNOWN
用NULL
于表达的任一侧)。
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*/
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说,如果你需要这样做,那么你应该改变你的数据库设计。
TA贡献1848条经验 获得超2个赞
Select * from your_table WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;
这种方法的唯一缺点是你只能比较5列,之后结果总是假的,所以我只比较可以的字段NULL
。
添加回答
举报