MySQL: выбор соединенных строк, где дети не принадлежат определенному идентификатору родителей - PullRequest
0 голосов
/ 22 марта 2019

Вопрос может показаться немного запутанным, я сделаю все возможное, чтобы объяснить это. У меня есть 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

1 Ответ

1 голос
/ 23 марта 2019
SELECT store_item_stock.id, store_item_stock.id_attribute, store_item_stock.stock 
FROM store_item_stock 
JOIN store_cat_attribute 
ON store_item_stock.id_attribute=store_cat_attribute.id_attribute
WHERE id_cat NOT IN (
SELECT store_item.id_cat 
FROM store_item JOIN store_cat_attribute 
ON store_item.id_cat=store_cat_attribute.id_cat 
WHERE store_item.id_cat=2 
GROUP BY store_item.id_cat);

Не думаю, что это так просто, но давайте попробуем это и посмотрим, соответствует ли условие вашему желаемому результату.

...