sql查询没有显示多个and-or子句的所需结果

vawmfj5a  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(448)

我下面的查询没有显示所需的结果。我不明白我在哪里用错括号了
查询:

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_brId != 156 请帮忙。谢谢!

k10s72fa

k10s72fa1#

你身体的这部分 WHERE 子句不正确:

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

如果 rest_brId = 156 ,尽管该条款的第一部分不正确,但第二部分到第五部分(例如。 rest_brId != 188 )是真的,因此该行进入您的输出。您需要将该行更改为:

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

或者使用 NOT IN 正如@gordonlinoff建议的那样。

y1aodyip

y1aodyip2#

使用 in :

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)

注意 ? . 这是talbe的别名 rest_brID .
你的逻辑问题在于 OR 对于不等于,而不是括号。这部分逻辑的计算结果总是正确的,因为您实际上想要 AND 而不是 OR 对于这部分逻辑。

相关问题