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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 5.5版本中,sql_mode的默认设置是空值,即没有设置任何模式。因此,在该版本中,默认不启用only_full_group_by模式。 只有在MySQL 5.7和8.0版本中,默认启用only_full_group_by模式。only_full_group_by模式要求在使用GROUP BY子句时,SELECT语句中的所有非聚合列都必须出现在GROUP BY子句中。如果未遵循这一规则,执行聚合SQL语句时会报错。 因此,如果你想使用only_full_group_by模式,你需要将MySQL版本升级到5.7或8.0,并且在执行GROUP BY语句时,确保SELECT语句中的所有非聚合列都出现在GROUP BY子句中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL错误sql_mode=only_full_group_by完美解决方案](https://blog.csdn.net/u011414736/article/details/125676859)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [this is incompatible with sql_mode=only_full_group_by 报错解决办法](https://blog.csdn.net/Climbman/article/details/131269848)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值