Поставьте несколько скобок в
select *
from outerb
where
not exists(
select *
from wms
where
wms.barcode = outerb.barcode
)
and (pcode = '' or pcode is null)
and (brand = '' or brand is null);
Всякий раз, когда вы смешиваете И и ИЛИ, используйте скобки, чтобы было ясно как БД, так и человеку, который поддерживает это после вас, какой набор истин идет вместе. Без них MySQL сначала оценит любые AND, а затем оценит любые OR. Это означает, что когда вы говорите:
a AND b OR c AND d OR e
MySQL сделает то, что вы хотели:
(a AND b) OR (c AND d) OR e --MySQL does
a AND (b OR c) AND (d OR e) --you wanted
Совсем другой набор истин, эти двое
Взгляните на Mysql или / и приоритет? для получения дополнительной информации
Сноска от Тима и общие рекомендации при работе с MySQL. MySQL может немного походить на Visual Basic 6 - в настройках по умолчанию он позволяет вам быть немного более неаккуратным в кодировании, чем в большинстве других баз данных. Такие вещи, как отсутствие необходимости указывать явный GROUP BY в запросе, который использует агрегаты; это просто изобретет группировку для вас. Это также позволяет использовать двойные кавычки для строк, когда стандартом SQL являются одинарные кавычки. Стандарт SQL использует двойные кавычки для кавычек имен столбцов и т. Д., Поэтому SELECT a as "my column name with spaces"
- MySQL также допускает двойные кавычки для строк, а это не спецификация. Так почему же придерживаться спецификации? Это делает ваши навыки работы с базами данных намного более переносимыми - если вы изучаете стандартный SQL, он работает в большем количестве мест, чем специфичные для MySQL sql, это означает, что вы можете с большей уверенностью сказать на собеседовании, что кросс-навыки вашей базы данных хороши, потому что вы использовали диапазон баз данных, сосредотачивая ваше обучение на стандарте sql, вместо того чтобы говорить «я только когда-либо использовал MySQL, но я уверен, что могу учиться…». Конечно, вы всегда будете сталкиваться с конкретными вещами, поскольку стандарт не поспевает за потребительским спросом, как это делают реализации. Примечание; Я считаю, что Postgres является одной из лучших баз данных для строгого соблюдения спецификаций SQL и, следовательно, обеспечивает хорошую учебную базу данных