这个问题听起来可能有些混乱,我会尽力进行解释。我有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/

10-15 19:50