MySQL Multiple, где условия, результаты не соответствуют всем условиям - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть запрос, который внедряется в MySQL из expressJS, однако, когда эти запросы выполняются.Иногда мне возвращают данные, которые не соответствуют условиям правильно.


Оригинал:

SELECT * FROM table
  WHERE status = 'Invoiced'
  AND (ordereddate between '2009-12-01' AND '2011-12-30')
  OR (duedate between '2009-12-01' AND '2011-12-30');

Результаты:

Ordered Date   Due Date      Status
2009-11-18     2009-12-16    Invoiced
2009-11-18     2009-12-14    Cancelled

Результаты показывают элементы с любым статусомвыполняется, но условие даты выполнено.


Попытка:

SELECT * FROM table
  WHERE (status = 'Invoiced')
  AND (ordereddate between '2009-12-01' AND '2011-12-30')
  AND (duedate between '2009-12-01' AND '2011-12-30');

Результаты: Если либо ordereddate или duedate выходит за пределы диапазона дат, элемент будет исключен из результата.

Изменено на AND вместо OR


Tried:

SELECT * FROM table
  WHERE status = 'Invoiced'
  AND (ordereddate AND duedate between '2009-12-01' AND '2011-12-30');

Результаты: Возвращает все правильно, кроме случаев, когда ordereddate или duedate находятся вне диапазона дат, строка будетисключено из результата.

Объединено ordereddate и duedate, где условие


Попробовано:

SELECT * FROM table
  WHERE status = 'Invoiced'
  AND (ordereddate OR duedate between '2009-12-01' AND '2011-12-30');

Результат:

Ordered Date   Due Date      Status
2008-07-07     2008-07-28    Invoiced
2008-07-07     2008-07-25    Invoiced
2008-07-07     2008-07-23    Invoiced

Похоже, что этот выводит правильный статус, однако дата неверна, он, кажется, вытягивает что-либо со статусом Invoiced и игнорирует диапазон дат.

1 Ответ

0 голосов
/ 27 февраля 2019

Если я правильно понимаю ваш вопрос, вам нужно использовать дополнительные скобки:

SELECT
    *
FROM
    table
WHERE
    status = 'Invoiced'
    AND (
           (ordereddate between '2009-12-01' AND '2011-12-30')
        OR (duedate between '2009-12-01' AND '2011-12-30')
    )
;
...