第一张表: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>
我以很多不同的方式尝试过它,找不到能够结合各种条件的公式!
答案 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 ...