Вопрос может показаться немного запутанным, я сделаю все возможное, чтобы объяснить это. У меня есть 4 таблицы:
- store_item : продукты
- store_cat : категории товаров. Каждый товар имеет 1 категорию.
- store_cat_attribute : атрибуты категории. Каждая категория имеет N атрибутов.
- store_item_stock : запас товара по атрибуту
Цель состоит в том, чтобы получить все id
s из таблицы store_item_stock
для конкретного продукта, если store_item_stock.id_attribute
не связано с текущим store_item.id_cat
Вот SQLfiddle для структуры: http://sqlfiddle.com/#!9/d686b9/2
Мой текущий запрос фактически получает все строки store_item_stock
для продукта, но он также включает атрибуты, которые принадлежат текущему store_item.id_cat
:
SELECT store_item_stock.id, store_item_stock.id_attribute, store_item_stock.stock
FROM store_item_stock
LEFT JOIN store_item ON store_item.id_item = store_item_stock.id_item
LEFT JOIN store_cat_attribute ON store_cat_attribute.id_cat = store_item.id_cat
WHERE store_item_stock.id_item = 1 AND store_item.id_cat = 2 GROUP BY store_item_stock.id
Например, id_attribute
2, 3 и 4 принадлежат id_cat
2, а id_attribute
33 & 34 принадлежат id_cat
4, поэтому, если целью запроса было получить ВСЕ строки store_item_stock
, кроме для тех, у которых id_attribute
связан с store_item.id_cat
2, он должен вернуть:
- id : 104, id_attribute : 33, акции : 26
- id : 105, id_attribute : 34, акции : 28