I have a row in the table users
with the username test
. For some reason, though, this query returns an empty result set.
SELECT `id` FROM `users` WHERE `username` = "test" AND `id` != null;
However, if I remove the `id` != null
segment, the query returns the result id = 1
.
But 1
!= NULL
. How is this happening?
The id
field is non-nullable and is auto-increment.
Thanks!
By database definition in general ,Null is nothing and cannot be equated or compared with any other value. Hence ID=NUll or ID!=null wouldn't work.
Your method of checking for NULL is probably the issue. In MySQL, try the following:
To check for NULL and an empty string, you can use:
Try:
OR
The query doesn't return a row because the predicate "
id != NULL
" will never return TRUE.Th reason for this is that boolean logic in SQL is three valued. A boolean can have values of
TRUE
,FALSE
orNULL
.And an inequality comparison will return
NULL
whenever one (or both) of the values being compared isNULL
.The SQL standard means to compare to a NULL is to use
id IS NULL
orid IS NOT NULL
. MySQL also adds a convenient null-safe comparison operator which will return TRUE or FALSE:col <=> NULL
. Or, in your caseNOT (col <=> NULL)
try using IS NOT NULL
Have a look at the difference
SQL Fiddle DEMO