0

我有两列的表:

product_id 和 attr_value_id

通过这个查询,我得到 39 行:

SELECT * FROM ka_product_attributes WHERE attr_value_id IN (655, 656, 658)

通过这个查询,我得到 58 行:

SELECT * FROM ka_product_attributes WHERE attr_value_id IN (655, 656, 658, 589)

如何选择所有具有 attr_value_id 589 和以下 attr_value_id 655、656、658 之一的 product_id?

像这样的东西:

SELECT * FROM ka_product_attributes WHERE ( attr_value_id IN ( 655, 656, 658 ) AND attr_value_id IN ( 589 ) ) GROUP BY product_id HAVING COUNT( product_id ) >1

但这行不通。

4

1 回答 1

0

由于 EAV 模型将单个记录的属性(在传统关系模型下)“传播”到多个表行中,因此需要使用如下自连接来根据多个属性搜索项目。

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).
于 2012-11-12T18:27:08.127 回答