mysqlselect⾮空_sql-MySQLSELECT只是⾮空值
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
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
更新:根据您的意见,也许你想要这个?
sql中select是什么意思
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的观点,如果你需要这样做,那么你应该改变你的数据库设计。
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
我希望能帮助你。
我在MySQL中使⽤.myf命令来从shell中获取NULL值:
\! mysql -e "SELECT * FROM table WHERE column = 123456\G" | grep -v NULL
最适合使⽤适当的.myf,其中指定了数据库/⽤户名/密码。 这样你只需⽤\! 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