2013-11-25 37 views
1

第一个表:products_categories (category_id, category_infos…)巨大的SQL查询

二表:products_categories_relations (product_id, category_id)

三表:slave_products (master_product_id, published, product_logistics…)

四表:master_products (product_id, published, product_stock…)

我想所有空类别。如果它尊重的条件下,这种组合的类别可以被定义为空:

  • 没有产品在他们在主表,然后在从属表(

  • 没有发表的产品,如果产品是在主未公开但发布在奴隶,它没有公布,主人永远是对的)

  • product_stock in master in 0,但除非slave的product_logistics也是0。如果从products_logistics是1,我们不关心股票...

例子:

如果一个类别包含100个产品,但50主是未发表的30多处于从属和未公布在这些项目的最后20个中,master中的库存为0,因为这些物流选项为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 ...