这个问题可能听起来有些混乱,我会尽力解释。我有4张桌子:
目标是从id
表中获取特定产品的所有store_item_stock
s,只要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的那些,它应该返回:
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);
我不认为这很简单,但让我们尝试一下,看看条件是否符合你想要的输出。