jira filter != doesn't find empty values
Asked by Robert Nadon:

Hi all,

When I create a filter where field != value, the results do not show field = EMPTY issues.

A workaround is to do (field != value OR field = EMPTY) but I was told that this was not the way it used to be so I was wondering if there is a setting for that.

Thanks!

Robert


Answers:
author: Nic Brough -Adaptavist-
body: No, it hasn't changed.

"Does not equal" is not quite the same as "empty" because != says you're looking for a specific value to not be there. If there's no values to look for, you can't say that your selection isn't there because there's nothing to look for.  

Well, not since JIRA 3, which didn't have JQL, so you didn't have != or empty.

comments: author: Robert Nadon
body: Thanks, that was what I thought. I will tell them to use the workaround I listed above.


author: Nic Brough -Adaptavist-
body: It's a little bit confusing for humans, because of our fuzzy thinking. Even a "yes or no" question really has three "answers" - yes, no, and not answered.  

My friend explained it by saying "show me a picture of your black cat", then "show me a picture of all your cats who are not black", then "show me a picture of your dog who is not black". I don't have a dog, so I have to look for "empty" rather than "not black", because there's no dog there to not be black. (I love English negatives. Not)


author: Robert Nadon
body: Dang humans. Makes perfect sense to me, but my customer is still not happy. His concern is that in the future he will forget to use the "OR field = EMPTY" and miss records in his reports. I told him I could change the field to required and create a dummy value (called it "no value") and set that as default. Then go through with bulk change and find all issues with EMPTY values and change them to "no value", but I really do not like that solution as it adds even more clutter in my instance. Any thoughts on that solution?


author: Nic Brough -Adaptavist-
body: Yeah, I know, we need to think more logically :wink:  

I think your cluttered solution is about the only option you have without coding. Or just beating "empty != != " into him. The problem is that there are genuine uses for having them work differently!


author: John Haworth
body: Does this work around actually work. The Or function returns the values as if they were a separate query? So you end up with the results you excluded by using != in the = EMPTY results ie.

Pet type

* Cat
* Dog
* EMPTY

(Pet Type != dog OR field = EMPTY)

Which translates to. Show me everything that is not a dog, and show me everything (including dog) that is not empty

This returns

Dog, Empty, Cat

Not the expected

Empty, Cat


author: Nic Brough -Adaptavist-
body: Yes, using the right JQL does "work". There's an important thing to understand here - JQL is not SQL and it has nothing to say about the results are returned. When you "run" some JQL, all that the calling process gets back is a list of issues that matched the query.

Also, empty really does mean empty - there is nothing there in the database for an empty field, nothing at all. So in fact you can't say:

Pet type

* Cat
* Dog
* EMPTY

Because all you have is

Pet type

* Cat
* Dog

(And that's why != does not return the results, it's got nothing to compare with at all)

Your query translation is not quite right by the way

You said: "Pet type != dog or field is empty", which means "Show me all issues with a Pet type where it is not dog, and all issues that do not have a value in "field"". I'm guessing the issues being returned that have "Dog" on them have nothing in "field"  

I think you might mean "Pet type != dog or Pet type is empty", which would give you issues with no Pet type and issues with Cat


author: Paz Balaban
body: Hi

I'm facing the same issue. I need all results that are not 'Dog' , but i want to include all 'None'/Empty results as well.  
Can someone help me with the syntax?  

labels != Dog OR labels = None  
Doesn't do the trick and adding brackets doesn't help either.

comments: author: Robert G. Nadon
body: labels != Dog OR labels is EMPTY

is the correct syntax. There is no "None"  


author: Rob Hickey
body: Thanks for the syntax help everyone! This worked for me:

status not in (Done, Rejected) AND 'Customer(S) Reporting' is EMPTY


author: Rob Hickey
body: Hello Everyone - thanks for the syntax references. This worked for me:

*status not in (Done, Rejected) AND 'Customer(S) Reporting' is EMPTY*


author: Dale Keller
body: One would think the != Dog would bring back every value, including a non-value as that is not Dog. To exclude empty you should have to state != Dog and is not EMPTY. That's the logical solution to any query!!!