MySQL IFNULL ELSE
Asked Answered
A

4

64

I have a select statement where I want to make the select conditional like this:

IFNULL(field_a, field_a, field_b)

so that it checks field a. If a is null then the select would be field b.

Is that possible ?

Anodyne answered 9/7, 2010 at 18:21 Comment(1)
Maybe U mixed IFNULL and NULLIF. U need IFNULL: "If expr1 is not NULL, IFNULL() returns expr1; otherwise it returns expr2."Toothache
R
111

Use COALESCE:

SELECT COALESCE(field_a, field_b)

COALESCE is an ANSI standard function that returns the first non-null value from the list of columns specified, processing the columns from left to right. So in the example, if field_a is null, field_b value will be displayed. However, this function will return NULL if there is no non-null value from the columns specified.

It's supported on MySQL (I've used it on 4.1), SQL Server (since v2000), Oracle 9i+...

Rebel answered 9/7, 2010 at 18:23 Comment(3)
I support the use of COALESCE as well.Wallywalnut
Such a clear explanation of how the function works... Thanks! Updated the broken link.Amoebic
Pretty cool explanation of a function I'm not familiar with! However, for OP's question, using IF() is much more readable.Rounding
Y
90

and another way to skin that cat (flexible for not just null comparisons)...

select if(field_a is not null, field_a, field_b) from...
Young answered 30/4, 2014 at 18:26 Comment(2)
Best answer. Allow to do Select if(name is not null, CONCAT('name is : ',name),'');Hanley
select IFNULL(column, 'default') also works. See here: sqlfiddle.com/#!9/14b752/1/0Ballyrag
I
45

Yes, but it's just two parameters:

IFNULL(field_a,field_b)

If field_a is not null, it will be returned. Otherwise field_b will be returned.

Reference: IFNULL

Indigestible answered 9/7, 2010 at 18:24 Comment(0)
R
0

The question was modified, and it appears some answers are not in sync with the current question. Lets start over.
there is no IFNULL(test, NullCase, notNullCase), but there is a switch statement with else. In this example, i did a left join to find if there is a block, so, but I had the same question, because I want a 0 or 1. here is my solution.

select
CASE
WHEN person.blocked is NULL THEN 0
ELSE 1
END AS isBlocked
from mytable

Rogation answered 3/7, 2023 at 19:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.