Я пытаюсь получить все строки, в которых дата начала выше текущей даты или дата окончания выше текущей даты, а столбец whitepaper равен нулю.
По какой-то причине этот sql возвращает то, что я ожидаю, ЗА ИСКЛЮЧЕНИЕМ он также возвращает строки, в которых технический документ НЕ равен нулю, если я переверну sql и скажу, что технический документ НЕ НУЛЬ, он вернет все, как ожидалось, все те, где документ не равен нулю, а те, где технический документ является нулевым?
В «И» не следует ли указывать, что это должно быть заполнено?
SQL
SELECT id,
name,
whitepaper,
date_start,
date_end
FROM approved
WHERE date_start >= CURDATE() OR date_end >= CURDATE()
AND whitepaper IS NULL
ORDER BY date_end DESC
LIMIT 10






ваш OR должен быть в (), попробуйте следующее:
SELECT id, name, whitepaper, date_start, date_end
FROM approved
WHERE (date_start >= CURDATE() OR date_end >= CURDATE())
AND whitepaper IS NULL
ORDER BY date_end DESC LIMIT 10
Попробуйте заключить OR в круглые скобки:
SELECT id, name, whitepaper, date_start, date_end
FROM approved
WHERE (date_start >= CURDATE() OR date_end >= CURDATE()) AND whitepaper IS NULL
ORDER BY date_end DESC LIMIT 10
Ну, вы не можете использовать вместе с выражением, также вы можете проверить пустые данные в поле whitepaper вот мое предложение SELECT id, name, whitepaper, date_start, date_end FROM approved WHERE (date_start >= CURDATE() OR date_end >= CURDATE()) AND (ISNULL(whitepaper) or whitepaper='') ORDER BY date_end DESC LIMIT 10
Как вам говорили другие, вы должны использовать круглые скобки вокруг условия ИЛИ.
Почему ? Поскольку OR имеет более низкий приоритет, чем AND
Без скобок ваш запрос на самом деле
SELECT id,
name,
whitepaper,
date_start,
date_end FROM approved
WHERE date_start >= CURDATE()
OR
(
date_end >= CURDATE()
AND
whitepaper IS NULL
)
ORDER BY date_end DESC LIMIT 10
Спасибо, что вмешались, но с вашим сообщением возникли проблемы. Вы не объяснили, что вы сделали, чтобы помочь оператору увидеть его ошибку, или что отличает ваш ответ от тех, что были до вас. Кроме того, ваш код не отформатирован как код. Я не отвергаю ваш ответ, но другие могут, если вы немного не исправите его. stackoverflow.com/help/how-to-answer