这个问题听起来可能有些混乱,我会尽力进行解释。我有4张桌子:
store_item:产品
store_cat:产品类别。每个产品都有1个类别。
store_cat_attribute:类别属性。每个类别都有N个属性。
store_item_stock:按属性的产品库存
目的是从id
表中获取特定产品的所有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
最佳答案
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);
我想这不是那么简单,但是让我们尝试一下,看看条件是否符合您想要的输出。
关于mysql - MySQL:选择联接的行,其中 child 不属于特定的 parent ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55304550/