3

2 つのテーブル

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

これら 2 つのテーブルを結合する必要があります。where 句では、2 つの行属性値の両方を一致させる必要があります。2 つの行の値に基づいて結果を取得することは可能ですか。ユーザーの選択に基づいて、条件に一致するすべての製品を表示する必要があります。サイズ=10、色=赤の場合。

出力は

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 に答える