试图排除某些用户



新的SQL,但我试图找到titles其中的词"蓝色"one_answers";black"是礼物。但是,它们不能来自id为1和5的用户。我是这样做的:

SELECT title, id_card
FROM site
WHERE (title LIKE "%blue%" OR title LIKE "%black%")
AND (id_card != 1 OR id_card != 5)
ORDER BY id_card ASC;

然而,当我添加id 1和id 5不应该在查询中,它显示给我这样的东西:

博客标题用户
今天的蓝天真好1
黑色是我最喜欢的颜色2
我感觉很忧郁2
她穿着黑色的衣服3

你做对了。但是使用not in来获得正确的逻辑:

SELECT title, id_card
FROM site
WHERE (title LIKE '%blue%' OR title LIKE '%black%') AND
id_card NOT IN (1, 5)
ORDER BY id ASC;

你也可以使用AND来修复你的逻辑。

Gordon已经给了你字面上的答案,但我不确定这是否有助于你理解最初的错误,所以我要添加一些更多的信息。

你原来的构造是…

AND (id_card != 1 OR id_card != 5)

假设一行的id卡为1。我们来检查第一个条件

id_card != 1

我们的行通过这个测试了吗?不,因为身份证确实等于1。所以我们没有通过这个测试。表达式1 != 1false

等等,我们这里有一个or条件。因此,如果满足or条件,则整个条件可能仍然是true。让我们检查一下……

id_card !=5

1不等于5吗?是的,1不等于5。所以我们确实通过了这个测试。表达式1 !=5true

因此,如果我们将表达式作为一个整体来看,我们得到:

and (false or true)

既然or条件的一边是true,那么整个条件为真。这就是or的工作原理。

由于条件为真,where子句的这一部分不会将其过滤掉。所以我们得到了id_card= 1的行

请注意,无论id_card的值是什么,条件(id_card != 1 or id_card != 5)都将为真,因为对于您选择的任何值,该值都不能同时为1和5。要么不是1,要么不是5。因此,or条件至少有一面总是为真。

相关内容

  • 没有找到相关文章

最新更新