За последние 24 часа нас посетили 8711 программистов и 457 роботов. Сейчас ищут 119 программистов ...

Не равенство и NULL

Тема в разделе "MySQL", создана пользователем marlin, 5 сен 2020.

  1. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    52
    Симпатии:
    2
    В таблице есть например такие значения:
    Код (Text):
    1. id val
    2. 1     1
    3. 2     null
    4. 3     null
    5. 4     5
    6. 5     6
    Надо выбрать все id-шки всех строк у которых val не равен 5.
    Т.е. вот эти все кроме id=4.
    Просто val <> 5 игнорит значения с null.
    Вот таким запросом приходится обходится, его в основном если гуглить и советуют:
    Код (Text):
    1. select id from mytable where val is null or val<>5
    Но я смотрю что и запрос следующего вида нормально работает:
    Код (Text):
    1. select id from mytable where !(val <=>5)
    Тут нет подводных камней?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.548
    Симпатии:
    1.040
    Адрес:
    Лень
    PHP:
    1. WHERE val IN( '', 5 )
     
    #2 MouseZver, 5 сен 2020
    Последнее редактирование модератором: 5 сен 2020
  3. Drunkenmunky

    Drunkenmunky Новичок

    С нами с:
    12 авг 2020
    Сообщения:
    210
    Симпатии:
    35
    А чем вас не устраивает != ?
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.790
    Симпатии:
    437
    Тем, что это то же самое? :)

    Что значит «приходится обходиться»? Именно это условие и делает (в лоб) то, что вы просите. Хотите упростить условие, используйте NOT-NULL-поля и, например, 0 вместо NULL.
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.790
    Симпатии:
    437
    Мускул-специфичный оператор.
     
  6. Drunkenmunky

    Drunkenmunky Новичок

    С нами с:
    12 авг 2020
    Сообщения:
    210
    Симпатии:
    35
    А, понял чего он хочет.
    А так:
    Код (Text):
    1. WHERE val NOT IN(5)
    разве работать не будет?
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.548
    Симпатии:
    1.040
    Адрес:
    Лень
    нет.

    print (1 <=> 1); // 0
    print (1 <=> 2); // -1
    print (2 <=> 1); // 1
    --- Добавлено ---
    это аналогично !=
    --- Добавлено ---
    и стоп, разве космический оператор в sql есть ?
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.790
    Симпатии:
    437
    Повнимательнее. Я писал про != vs <>, что из цепочки постов/цитат четко видно. Так что «да», ты это сам подтвердил: «это аналогично !=» ;)
    --- Добавлено ---
    В мускуле есть, но смысл у него совсем другой: это равенство с учетом NULL.
     
    MouseZver нравится это.
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.548
    Симпатии:
    1.040
    Адрес:
    Лень
    признаю ошибки
     
  10. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    52
    Симпатии:
    2
    думаю все таки оставлю с OR , оно так очевиднее, особенно если тот мой вариант - это мускул специфичное