如何查找具有某些属性的所有产品?

时间:2012-05-06 10:15:42

标签: mysql

我在MySQL表中列出了产品属性,其中每行包含产品ID prod和属性ID prop。如果产品具有三个属性,则会为该产品生成三行。示例表:

prod | prop
-----+-----
1    | 1
2    | 1
2    | 2
2    | 3
3    | 2
3    | 4

如何找到哪些产品同时拥有属性#1和#2(产品#2)?

我能想到的唯一方法是每个属性选择一个内部连接,但我认为这样效率非常低。它是一个网站的搜索功能,必须在表中的10k行和10个请求的属性。

1 个答案:

答案 0 :(得分:2)

  SELECT prod
    FROM tbl
   WHERE prop IN (1, 2)
GROUP BY prod
  HAVING COUNT(*) = 2

如果总会找到2个属性 - 那么INNER JOIN会更有效率:

    SELECT t1.p
      FROM tbl t1
INNER JOIN tbl.t2 ON t2.prod = t1.prod
                 AND t2.prop = 2
     WHERE t1.prop = 1

此查询尽可能高效的建议索引是复合(prop, prod)