能否仅选择非NULL值的select语句?
我现在使用的是这个:
SELECT * FROM table
然后我需要使用PHP循环过滤掉空值。
有没有一种方法可以实现:
SELECT * (that are NOT NULL) FROM table
我现在使用select *语句,结果包含val1,val2,val3,null,val4,val5,null,null等等... 但是我只想得到结果中不为null的值。有没有可能在不使用循环过滤的情况下实现这一点?
能否仅选择非NULL值的select语句?
我现在使用的是这个:
SELECT * FROM table
然后我需要使用PHP循环过滤掉空值。
有没有一种方法可以实现:
SELECT * (that are NOT NULL) FROM table
我现在使用select *语句,结果包含val1,val2,val3,null,val4,val5,null,null等等... 但是我只想得到结果中不为null的值。有没有可能在不使用循环过滤的情况下实现这一点?
IS NOT NULL
。(比较运算符=
和 <>
在表达式的任一侧为NULL
时都会返回UNKNOWN
。)SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
完整性起见,我将提到在MySQL中,您也可以否定空安全相等运算符,但这不是标准SQL。
SELECT *
FROM table
WHERE NOT (YourColumn <=> NULL);
根据评论修改后的内容。看起来您的表可能不符合第一范式,如果是这样,改变结构可能会使您的任务更容易。还有其他几种方法可以实现...
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*/
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*/
CASE
语句而不是 CASE
函数。因此,在 SELECT CASE ...
部分中,应该使用 END CASE
而不是 END
,对吗? - Istiaque AhmedSELECT
中的idx
是否来自第二个SELECT
中的idx
?CASE
语句试图实现什么目标?第二个SELECT
实际上是做什么的?而且你正在进行内连接,而不是交叉连接,对吗? - Istiaque AhmedSELECT col1, col2, ..., coln
FROM yourtable
WHERE somecolumn IS NOT 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 的观点,如果你需要这样做,那么你可能应该更改你的数据库设计。
*
返回的列是什么吗?或者在你的问题中提供一些示例数据,因为从你上面的评论中并不清楚这是否是一个列。 - Martin SmithSelect * from your_table
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;
这种方法唯一的缺点是你只能比较5列,之后结果总是false,所以我只比较那些可以为NULL
的字段。
我找到了这个解决方案:
这个查询可以选择每列的最后一个非空值。
例如:
如果你有一个表:
id|title|body
1 |t1 |b1
2 |NULL |b2
3 |t3 |NULL
你将获得:
title|body
t3 |b2
查询
SELECT DISTINCT (
SELECT title
FROM test
WHERE title IS NOT NULL
ORDER BY id DESC
LIMIT 1
) title, (
SELECT body
FROM test
WHERE body IS NOT NULL
ORDER BY id DESC
LIMIT 1
) body
FROM test
我希望能为您提供帮助。
以下查询对我有效:
当我将列的默认值设置为“NULL”时
select * from table where column IS NOT NULL
当我没有设置默认值时
select * from table where column <>''
Using IS NOT NULL On Join Conditions
SELECT * FROM users
LEFT JOIN posts ON post.user_id = users.id
WHERE user_id IS NOT NULL;
Using IS NOT NULL With AND Logical Operator
SELECT * FROM users
WHERE email_address IS NOT NULL
AND mobile_number IS NOT NULL;
Using IS NOT NULL With OR Logical Operator
SELECT * FROM users
WHERE email_address IS NOT NULL
OR mobile_number IS NOT NULL;
\!
命令来从shell中搜索NULL值:\! mysql -e "SELECT * FROM table WHERE column = 123456\G" | grep -v NULL
最好使用正确的.my.cnf
文件,其中指定了您的数据库/用户名/密码。这样,您只需在select
周围加上\! mysql e
和| grep -v NULL
就可以了。
请在您的查询中使用 NOT NULL
,例如下面这样。
SELECT *
FROM table
WHERE col IS NOT NULL;
SELECT duration,id FROM `tickets` WHERE duration !=""