2013-11-25 3 views
1

Первая таблица: products_categories (category_id, category_infos…)Огромный SQL запрос на 4 таблицы и нескольких условий

Вторая таблица: products_categories_relations (product_id, category_id)

Третий стол: slave_products (master_product_id, published, product_logistics…)

Четвертый стол: master_products (product_id, published, product_stock…)

Я хочу, чтобы все пустые категории. Категория может быть определена как пустыми, если она уважает эту комбинацию условий: не

  • нет товаров в них

  • нет опубликованных продукты в основной таблице, а затем в подчиненном таблице (если продукт неопубликованный в мастере но опубликован в рабстве, он не опубликован. Мастер всегда прав.)

  • product_stock в master в 0, но кроме случаев, когда product_logistics в slave также 0. Если products_logistics в рабе 1, мы не заботимся о наличии ...

Пример:

если категория содержит 100 продуктов, а 50 являются неопубликованными в мастере и 30 более не опубликованы в рабском а запаса в мастер-0 для последних 20 из этих предметов, так как логистические опции равны 0 для этих ... он пуст!

Я пробовал его по-разному и не могу найти формулу, которая могла бы сочетать все условия!

ответ

1

Я думаю, что это то, что вы ищете, и вы можете добавить дополнительные «ИЛИ» заявления второго запроса, если есть переменные я пропавшими без вести:

SELECT products_categories.* 
WHERE products_categories.category_id NOT IN 
(
SELECT distinct category_id from products_categories_relations 
) 
OR products_categories.category_id NOT IN 
(
SELECT distinct products_categories.category_id 
FROM products_categories 
INNER JOIN products_categories_relations pcr ON prc.category_id = products_categories.category_id 
INNER JOIN master_products master ON master.product_id = pcr.product_id 
INNER JOIN slave_products slav on slav.master_product_id = master.product_id 
WHERE master.published = 0 
OR (master.product_stock = 0 AND slav.product_logistics = 0) 
) 
+1

Это был не совсем правильный способ выполнить запрос, но сама структура была именно тем, что я пропустил;) Thx –

0

Вы можете сделать 3 запроса, каждый из которых удовлетворяет одному из условий выше, а затем объединить запросы. Что-то вроде этого:

SELECT * FROM 
Query 1 AS Q1,Query 2 AS Q2, Query 2 AS Q3 
WHERE Q1.category_id= Q2.category_id AND ... 
Смежные вопросы