2

I am facing an abnormal issue with the enum field(UserStatus) of my table(userinfo). The table structure is as follows:

Field       Type        Default
------------------------------------------
Id          int(11)       (NULL)
FirstName   varchar(50)   (NULL)
LastName    varchar(50)   (NULL)
....        ...           ...
....        ...           ...   
UserStatus  enum('0','1') (NULL)

Here I have rows with the UserStatus values as NULL, 0 and 1. But When I am trying to select rows on the basis of the UserStatus field like:

SELECT 
    * 
FROM 
    userinfo 
WHERE 
    UserStatus<>'1'

Its not working and resulting in an empty resultset.

Thanks in advance.

4
  • Remember that NULL <> '1' is NULL and therefore falsy! Have you tried UserStatus <> 1 OR UserStatus IS NULL? Commented Apr 10, 2013 at 20:42
  • Why not use BIT column type? Commented Apr 10, 2013 at 20:50
  • @cdhowie : Thanks man, it worked for the UserStatus<>'1' by using the condition NotMine <> '1' OR NotMine IS NULL Commented Apr 10, 2013 at 20:53
  • 1
    @Pushpendra Glad it worked. I've converted my comment into an answer. Commented Apr 10, 2013 at 20:55

2 Answers 2

3

Remember that NULL <> '1' is itself NULL and therefore your condition won't match rows whose UserStatus is NULL. Use this expression instead:

UserStatus IS NULL OR UserStatus <> '1'
Sign up to request clarification or add additional context in comments.

Comments

0

It would be a better structure, if you would give a default value and make the field NOT NULL but in this case you could use

 SELECT * 
 FROM userinfo 
 WHERE ifnull(UserStatus, '0') <> '1'

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.