我想选择一行中sender不等于任何列表元素的行,如果不等于,则检查receiver是否不等于任何一个列表元素
SELECT * FROM messages WHERE ((sender NOT IN ( 'user1','3' )) OR (recipient NOT IN ( 'user1','3' )))
问题:
这不是像以前那样过滤数据并给出结果!
尽管这确实有效:
SELECT * FROM messages WHERE (recipient NOT IN ( 'user1','3' ))
应该改变什么?
对于未来的读者,上面的评论让我了解了如何使用OR和NOT IN,如下所示:
SELECT * FROM messages WHERE (sender OR recipient NOT IN ( 'user1','3' ))
您需要吗
where
NOT ( sender IN ( 'user1','3' )
OR recipient IN ( 'user1','3' )
)
所以这里,包装OR条件是…发件人是列表中的一个,或者收件人是列表中一个。外层抛出NOT。