SQL-запрос не показывает желаемый результат с несколькими предложениями AND и OR - PullRequest
0 голосов
/ 20 ноября 2018

Мой следующий запрос не показывает желаемый результат.Я не понимаю, где я использую скобки неправильно

Запрос:

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)

Результат приходит: enter image description here

Ноэти строки не должны появляться, потому что я упомянул в запросе, что rest_brId != 156

Пожалуйста, помогите.Спасибо!

Ответы [ 2 ]

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

Эта часть вашего 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.

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

Использование 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 для этой части логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...