Is it possible to do a select statement that takes only NOT NULL values?
Right now I am using this:
SELECT * FROM tableAnd then I have to filter out the null values with a php loop.
Is there a way to do:
SELECT * (that are NOT NULL) FROM table?
Right now when I select * I get val1,val2,val3,null,val4,val5,null,null etc.... but I just want to get the values that are not null in my result. Is this possible without filtering with a loop?
- 2What do you want to happen if there is a row where some columns have NULL values and other columns have not NULL values?Mark Byers– Mark Byers2011-03-12 21:05:03 +00:00CommentedMar 12, 2011 at 21:05
- I would like to only get the values from the columns that are not null, and return only the column values in the row that are not null. Right now I use a loop to filter them out, is it possible to do that without a loop?bryan sammon– bryan sammon2011-03-12 21:08:53 +00:00CommentedMar 12, 2011 at 21:08
- 1@bryan - What is your table structure? Do all columns have the same datatype?Martin Smith– Martin Smith2011-03-12 21:10:02 +00:00CommentedMar 12, 2011 at 21:10
- 1@bryan - So what would your ideal result set look like then? A one column result set containing all the non null values? If not editing your question with example data and desired results would be helpful...Martin Smith– Martin Smith2011-03-12 21:15:17 +00:00CommentedMar 12, 2011 at 21:15
- 2@bryan - It sounds like your table may well have repeating groups across columns? (See the Wiki article for an explanation and a suggested alternative structure if that is the caseen.wikipedia.org/wiki/First_normal_form)Martin Smith– Martin Smith2011-03-12 21:30:59 +00:00CommentedMar 12, 2011 at 21:30
12 Answers12
You should useIS NOT NULL. (The comparison operators= and<> both giveUNKNOWN withNULL on either side of the expression.)
SELECT * FROM table WHERE YourColumn IS NOT NULL;Just for completeness I'll mention that in MySQL you can also negate thenull safe equality operator but this is not standard SQL.
SELECT *FROM table WHERE NOT (YourColumn <=> NULL);Edited to reflect comments. It sounds like your table may not be in first normal form in which case changing the structure may make your task easier. A couple of other ways of doing it though...
SELECT val1 AS valFROM your_tableWHERE val1 IS NOT NULLUNION ALLSELECT val2 FROM your_tableWHERE val2 IS NOT NULL/*And so on for all your columns*/The disadvantage of the above is that it scans the table multiple times once for each column. That may possibly be avoided by the below but I haven't tested this in MySQL.
SELECT CASE idx WHEN 1 THEN val1 WHEN 2 THEN val2 END AS valFROM your_table /*CROSS JOIN*/ JOIN (SELECT 1 AS idx UNION ALL SELECT 2) tHAVING val IS NOT NULL /*Can reference alias in Having in MySQL*/7 Comments
CASE statement, notCASE function. So shouldn't it beEND CASE instead ofEND in theSELECT CASE ... part ?idx rom the firstSELECT come from theidx in the secondSELECT ? What does theCASE statement try to accomplish ? What does the secondSELECT actually do ? And you are doing an inner join, not a cross join, right ?SELECT * FROM table WHERE * IS NOT NULL AND primary_key="somevalue")You can filter out rows that contain a NULL value in a specific column:
SELECT col1, col2, ..., colnFROM yourtableWHERE somecolumn IS NOT NULLIf you want to filter out rows that contain a null in any column then try this:
SELECT col1, col2, ..., colnFROM yourtableWHERE col1 IS NOT NULLAND col2 IS NOT NULL-- ...AND coln IS NOT NULLUpdate: Based on your comments, perhaps you want this?
SELECT * FROM( SELECT col1 AS col FROM yourtable UNION SELECT col2 AS col FROM yourtable UNION -- ... UNION SELECT coln AS col FROM yourtable) T1WHERE col IS NOT NULLAnd I agre with Martin that if you need to do this then you should probably change your database design.
3 Comments
* returns? Maybe provide a bit of example data in your question as it is not clear from your comment above whether this is all one column.Select * from your_table WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;The only disadvantage of this approach is that you can only compare 5 columns, after that the result will always be false, so I do compare only the fields that can beNULL.
Comments
I found this solution:
This query select last not null value for each column.
Example
If you have a table:
id|title|body1 |t1 |b12 |NULL |b23 |t3 |NULLyou get:
title|bodyt3 |b2Query
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) bodyFROM testI hope help you.
1 Comment
Following query working for me
when i have set default value of column 'NULL' then
select * from table where column IS NOT NULLand when i have set default value nothing then
select * from table where column <>''Comments
Yes useNOT NULL in your query like this below.
SELECT * FROM tableWHERE col IS NOT NULL;Comments
I use the\! command within MySQL to grep out NULL values from the shell:
\! mysql -e "SELECT * FROM table WHERE column = 123456\G" | grep -v NULLIt works best with a proper.my.cnf where your database/username/password are specified. That way you just have to surround yourselect with\! mysql e and| grep -v NULL.
Comments
You didn't even have to use an asterisk to get the table fields.
Comments
Add condition >0 for int columns and != "" for varchar columns
select column1_id, column2, colummn3, where column1_id>0 and column2 != ""Comments
SELECT duration,id FROM `tickets` WHERE duration !=""Comments
WHERE COALESCE(ALL YOUR COLUMNS) IS NOT NULL
2 Comments
SELECT * FROM TABLE_NAMEwhere COLUMN_NAME <> '';2 Comments
Explore related questions
See similar questions with these tags.











