В выборку должны попасть все заказы в которых все продукты с категорией отличной от 9 доставлены
и при этом минимум один с категорией 9 не доставлен.
Тут запрос составляли изначально
Я его переделал на EXIST для ускорения и добавил недостающее условие.
Получилось это. Мне кажется можно записать это короче, посмотрите опытным взглядом пожалуйста
SELECT
*
FROM
orders
WHERE
EXISTS (SELECT `op`.`orders_id`
FROM `orders_products` AS `op`
JOIN `products` AS `p` ON `p`.`id` = `op`.`products_id`
WHERE `op`.`delivery_complete` != 1 AND `p`.`category_id` = 9 AND `op`.`orders_id` = orders.id)
AND
EXISTS (SELECT `op`.`orders_id`
FROM `orders_products` AS `op`
JOIN `products` AS `p` ON `p`.`id` = `op`.`products_id`
WHERE ( `p`.`category_id` != 9 AND `op`.`orders_id` = orders.id ))
AND
NOT EXISTS (SELECT `op`.`orders_id`
FROM `orders_products` AS `op`
JOIN `products` AS `p` ON `p`.`id` = `op`.`products_id`
WHERE ( `op`.`delivery_complete` != 1 AND `p`.`category_id` != 9 AND `op`.`orders_id` = orders.id ))
ORDER BY orders.id DESC