Ваша проблема связана с тем, как вы используете операторы AND
и OR
: AND
имеет более высокий приоритет, чем OR
, поэтому это:
WHERE
`ingredients`.`name` LIKE '%makers%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%jack%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%hennesey%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%bourbon%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%RYE%' ESCAPE '!'
AND NOT EXISTS (
SELECT * FROM ingredients_master WHERE ingredients.NAME = ingredients_master.NAME
)
Фактически эквивалентно:
WHERE
`ingredients`.`name` LIKE '%makers%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%jack%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%hennesey%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%bourbon%' ESCAPE '!'
OR (
`ingredients`.`name` LIKE '%RYE%' ESCAPE '!'
AND NOT EXISTS (
SELECT * FROM ingredients_master WHERE ingredients.NAME = ingredients_master.NAME
)
)
Таким образом, если любое из первых OR
ed условий имеет значение true, результат равен true, независимо от результата условия NOT EXIST
.
Возможно, вы хотите:
WHERE
(
`ingredients`.`name` LIKE '%makers%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%jack%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%hennesey%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%bourbon%' ESCAPE '!'
OR `ingredients`.`name` LIKE '%RYE%' ESCAPE '!'
)
AND NOT EXISTS (
SELECT * FROM ingredients_master WHERE ingredients.NAME = ingredients_master.NAME
)