MySQL - NULL safe NOT equal operator

前端 未结 4 779
隐瞒了意图╮
隐瞒了意图╮ 2020-12-03 06:58

I am just curious - I know about NULL safe equal operator <=>, but is there some NULL safe NOT equal operator? Or I have to always use something like this

相关标签:
4条回答
  • 2020-12-03 07:25

    Now MySQL does not have a NULL-safe not equal operator.

    Using MySQL the most universal solution is:

    !(tab.id <=> 1)
    

    or

    NOT tab.id <=> 1
    

    because it will work properly if even in place of 1 you will use NULL.

    0 讨论(0)
  • 2020-12-03 07:36

    If you know that the RHS of the comparison IS NOT NULL:

    COALESCE(tab.id != 1, 1)
    

    Or

    COALESCE(tab.id != 1, TRUE)
    

    will give you the correct result.

    Whether this is better more readable than:

    (tab.id != 1 OR tab.id IS NULL) 
    

    Is debatable..

    I'd also be tempted to filter out the NULL logic first with comparisons, so I don't have to think about them! I'd probably write your first equation as:

    (tab.id IS NULL OR tab.id != 1)
    

    Performance will depend on prevalence of NULLs however.

    0 讨论(0)
  • 2020-12-03 07:41

    I found that NOT (NULL <=> 1) works and I think it is also ISO standard compliant, but is cumbersome. A better way to show using column names would be like this: NOT (tbl.col1 <=> 1)

    0 讨论(0)
  • 2020-12-03 07:48
    COALESCE(tab.id, 0) != 1
    

    Can be used here if you like it. I goes through the parameters, and returns the first value that isn't NULL. In this case if it's NULL, it will compare 0 != 1. Although it may use more signs, it's still easier to manage instead of being forced to always have opposite "booleans" as a solution in those cases.

    Read documentation for COALESCE()

    0 讨论(0)
提交回复
热议问题