4个表和多个条件的巨大SQL查询

时间:2013-11-25 18:39:10

标签: mysql

第一张表:products_categories (category_id, category_infos…)

第二张表:products_categories_relations (product_id, category_id)

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

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

我想得到所有空的类别。如果某个类别符合以下条件组合,则可以将其定义为空:

  • 其中没有产品

  • 主表中没有已发布的产品,然后在slave表中(如果产品未在master中发布但在slave中发布,则不会发布.Master总是正确的。)

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

示例:

如果一个类别包含100个产品,但50个未在master中取消发布,另外30个在slave中未发布,并且master中的库存为0,这些项目的最后20个因为这些物流选项为0 ...它是空的! / p>

我以很多不同的方式尝试过它,找不到能够结合各种条件的公式!

2 个答案:

答案 0 :(得分:1)

我认为这正是您正在寻找的内容,如果存在我缺少的变量,您可以向第二个查询添加其他“OR”语句:

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 :(得分:0)

您可以制作3个查询,每个查询满足上述条件之一,然后将查询连接在一起。 像这样:

SELECT * FROM
Query 1 AS Q1,Query 2 AS Q2, Query 2 AS Q3
WHERE Q1.category_id=  Q2.category_id AND ...