НЕ с оператором ИЛИ MYSQL - PullRequest
       36

НЕ с оператором ИЛИ MYSQL

0 голосов
/ 30 ноября 2018

Я хочу выбрать строки, в которых sender не равен ни одному из элементов списка, и если он не равен, то проверьте, не равен ли получатель любой элемент списка. Использование NOT IN () с оператором OR, например:

SELECT * FROM messages WHERE ((sender NOT IN ( 'user1','3' )) OR (recipient NOT IN ( 'user1','3' ))) 

ПРОБЛЕМА:

Это не фильтрует данные и не даетрезультаты, как и раньше!

Хотя это действительно работает:

SELECT * FROM messages WHERE (recipient NOT IN ( 'user1','3' )) 

Что следует изменить?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вам нужно

where
   NOT (   sender IN ( 'user1','3' )
        OR recipient IN ( 'user1','3' )
       )

Итак, здесь условие обёрнутого ИЛИ ... отправитель - один из списка ИЛИ получатель - один из списка.Внешний бросок НЕ.

0 голосов
/ 30 ноября 2018

Для будущих читателей приведенные выше комментарии дали мне представление о том, как использовать ИЛИ с NOT IN, следующим образом:

SELECT * FROM messages WHERE (sender OR recipient NOT IN ( 'user1','3' )) 
...