MySQL仅选择非空值
MySQL SELECT only not null values的问题是如何在查询结果中只返回非空值。出现这个问题的原因是查询结果中包含了空值,但是希望只返回非空值。解决方法是使用WHERE子句来过滤出不包含空值的行。
如果想要过滤掉包含特定列中空值的行,可以使用以下语句:
SELECT 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
需要注意的是,如果需要频繁地进行这样的查询,可能需要重新设计数据库结构以避免出现大量的空值。
MySQL SELECT only not null values的问题是出现原因是为了只选择不为null的值。使用上述的查询语句可以实现这个目的。然而,这种方法的缺点是只能比较5个列,超过5个列之后,结果将始终为false。因此,最好只比较可能为null的字段。下面是解决这个问题的代码:
Select * from your_table WHERE col1 is not null and col2 is not null and col3 is not null and col4 is not null and col5 is not null;
这个查询语句将只返回那些col1、col2、col3、col4和col5都不为null的行。通过使用is not null操作符,我们可以确保只选择这些行。这是一个简单而有效的解决方法。
MySQL SELECT只选择非空值的原因是使用比较运算符=和<>时,如果表达式两边有NULL值,它们会返回UNKNOWN。因此,我们需要使用IS NOT NULL来选择非空值。
解决方法是在SELECT语句中使用IS NOT NULL条件,如下所示:
SELECT * FROM table WHERE YourColumn IS NOT NULL;
在MySQL中,还可以使用null safe equality operator(不是标准SQL)来否定NULL值。如下所示:
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*/
最后一种方法中,使用了CASE语句而不是CASE函数。所以在SELECT CASE部分,应该使用END CASE而不是END。这种方法的作用是选择非空值,并将其命名为val。
对于不太熟悉的人,我来解释一下最后一种解决方案。第一个SELECT语句中的idx是来自第二个SELECT语句中的idx吗? CASE语句的目的是什么?第二个SELECT语句实际上在做什么?你使用的是内连接而不是交叉连接,对吗?
我不认为这个回答回答了问题。问问题的人似乎想选择(我假设是一个特定的)行,但排除结果中所有为空的列-这个答案要求您要么指定哪些列不允许为空(这是一个完全不同的问题),要么指定所有列,对于有许多列的表来说不合适(例如类似于SELECT * FROM table WHERE * IS NOT NULL AND primary_key="somevalue"的语句)-提问者接受了这个答案,所以可以假设它对他们来说已经足够回答了问题。请随时添加自己的答案或提出新问题。
我认为这更多是因为它解决了他的问题,而不是回答了他的问题,而且听起来他想要的东西不可能像上面那样简洁地实现。
这是一个很好的答案,非常完整:) - 谢谢