3

两张桌子

1)product

--------------------
id  |  Name   |  price
1   |   p1    |    10
2   |   p2    |    20
3   |   p3    |    30

2)product_attributes

---------------------------------------------------
id | product_id | attribute_name | attribute_value
---------------------------------------------------
1  |   1        |  size          |     10
2  |   1        |  colour        |     red
3  |   2        |  size          |     20

我需要加入这两个表。在 where 子句中,我需要匹配两行属性值。是否可以根据两行值获得结果。根据用户选择,我需要显示所有符合条件的产品。这里如果 size=10 和 colour=red。

输出应该是

1   |   p1    |    10

对此进行查询可能会很有帮助。

4

1 回答 1

2
select p.* from product p
join (select a1.product_id id from product_attributes a1 join product_attributes a2 using (product_id)
      where a1.attribute_name = 'size' and a1.attribute_value = '10'
        and a2.attribute_name = 'colour' and a2.attribute_value = 'red') pa
using (id)

如果您需要匹配更多属性,只需向子查询添加更多连接。

于 2012-12-02T05:03:01.343 回答