Mysql SQL查询未显示包含多个AND或子句的所需结果

Mysql SQL查询未显示包含多个AND或子句的所需结果,mysql,sql,Mysql,Sql,我的以下查询未显示所需的结果。我不明白我在哪里用错了括号 查询: SELECT `orders`.*, `users`.`fullname`, `users`.`phone` FROM `orders` JOIN `users` ON `orders`.`userId` = `users`.`id` WHERE `orders`.`payment_verified_status` = '1' AND (`orders`.`restId` = 132 OR `orders`.`restId` =

我的以下查询未显示所需的结果。我不明白我在哪里用错了括号

查询:

SELECT `orders`.*, `users`.`fullname`, `users`.`phone`
FROM `orders`
JOIN `users` ON `orders`.`userId` = `users`.`id`
WHERE `orders`.`payment_verified_status` = '1'
AND (`orders`.`restId` = 132 OR `orders`.`restId` = 133 OR `orders`.`restId` = 134)
AND (`rest_brId` != 156 OR `rest_brId` != 188 OR `rest_brId` != 157 OR `rest_brId` != 691 OR `rest_brId` != 158)
结果是:

但是这些行不应该出现,因为我在查询中提到了
rest\u brId!=156

请帮忙。谢谢

在中使用

SELECT o.*, u.`fullname`, u.`phone`
FROM `orders` o JOIN
     `users` u
     ON o.`userId` = u.`id`
WHERE o.`payment_verified_status` = 1 AND
      o.`restId` IN (132, 133, 134) AND
      ?.`rest_brId` NOT IN (156, 188, 157, 691, 158)
请注意
。这是用于
rest\u brID
的talbe别名


您的逻辑的问题在于非等号的
,而不是括号。这部分逻辑的计算结果始终为true,因为您实际上希望该部分逻辑使用
而不是

这部分
WHERE
子句不正确:

(`rest_brId` != 156 OR `rest_brId` != 188 OR `rest_brId` != 157 OR `rest_brId` != 691 OR `rest_brId` != 158)
如果
rest\u brId=156
,尽管该子句的第一部分不是真的,但第二到第五部分(例如
rest\u brId!=188
)是真的,因此该行进入输出。您需要将该行更改为:

(`rest_brId` != 156 AND `rest_brId` != 188 AND `rest_brId` != 157 AND `rest_brId` != 691 AND `rest_brId` != 158)

或者使用@GordonLinoff建议的
不在
子句。

想象一下,你在谷歌上搜索你的确切问题。你会用谷歌搜索“SQL查询未显示正确结果”吗?尝试重新表述您的问题,使其更具体,但您也说了“OR rest_brId!=188”,这一行和所有其他行都是正确的,因此and子句总体上是正确的,因此它返回该行。你的朋友不在这里。
A!=1或A!=2
对于
A=1将为真,因为表达式
A!=2
为真