我有两列的表格:
product_id和attr_value_id
使用此查询,我得到39行:
SELECT * 来自ka_product_attributes 在哪里attr_value_id IN(655,656,658)
使用此查询我得到58行:
SELECT * 来自ka_product_attributes 在哪里attr_value_id IN(655,656,658,589)
如何选择所有具有attr_value_id 589和以下attr_value_id 655,656,658之一的product_id?
这样的事情:
SELECT * 来自ka_product_attributes WHERE(attr_value_id IN(655,656,658) 和attr_value_id IN(589)) GROUP BY product_id 有COUNT(product_id)> 1
但这不会奏效。
答案 0 :(得分:0)
因为EAV模型将单个记录(在传统关系模型下)的属性“扩展”到多个表行中,所以需要使用如下所示的自联接来基于多个属性搜索项目。 / p>
SELECT DISTINCT A1.product_id -- see note about DISTINCT, below
FROM ka_product_attribute A1
JOIN Ka_product_attribute A2 ON A1.product_id == A2.product_id
WHERE A1.attr_value_id = 589
AND A2.attr_value_id in (655, 656, 658)
-- The 'DISTINCT' is only necessary if duplicates are allowed for values of the
-- attribute 589. (in other words if ka_product_attributes can have several
-- records with for a product_id + attr_value_id combination).