mysql select 非空_sql - MySQL SELECT只是非空值

sql - 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的值。 这可能没有过滤循环吗?

8个解决方案

393 votes

您应该使用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 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*/

Martin Smith answered 2019-02-26T01:24:44Z

17 votes

您可以筛选出特定列中包含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的观点,如果你需要这样做,那么你应该改变你的数据库设计。

Mark Byers answered 2019-02-26T01:25:32Z

12 votes

Select * from your_table

WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;

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

Alan Chavez answered 2019-02-26T01:25:58Z

7 votes

我找到了这个解决方案

此查询为每列选择last not 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

我希望能帮助你。

porquero answered 2019-02-26T01:26:48Z

2 votes

我在MySQL中使用.my.cnf命令来从shell中获取NULL值:

\! mysql -e "SELECT * FROM table WHERE column = 123456\G" | grep -v NULL

最适合使用适当的.my.cnf,其中指定了数据库/用户名/密码。 这样你只需用\! mysql e和| grep -v NULL包围你的select。

A.J. answered 2019-02-26T01:27:22Z

1 votes

以下查询为我工作

当我设置列'NULL'的默认值时

select * from table where column IS NOT NULL

当我没有设置默认值时

select * from table where column <>''

Basant answered 2019-02-26T01:28:05Z

0 votes

是的在您的查询中使用NOT NULL,如下所示。

SELECT *

FROM table

WHERE col IS NOT NULL;

Jonathan Vasiliou answered 2019-02-26T01:28:34Z

-4 votes

SELECT * FROM TABLE_NAME

where COLUMN_NAME <> '';

Venkat Kallem answered 2019-02-26T01:28:54Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值