开发者

mySQL: Querying one-to-many -table?

What would be the appropriate way to query products with a specific property in the following database design with a one-to-many approach?

I guess that I should be doing something like the following: SELECT (*) FROM productProperties WHERE property = 'weight' AND value = '10'

But what if I need to products that has both weight = 10 & color = blue in the same query?

Example of database design:

table: products

------------------------
id    | name     |  price
-------开发者_运维百科-----------------
0     | myName   |  100
1     | myName2  |  200

table: productProperties

------------------------------------------------
product  | property     |  Value
------------------------------------------------
0        | weight       |  10
1        | weight       |  20
1        | color        |  blue


What if I need to products that has both weight = 10 & color = blue in the same query?

One option:

select product, name
  from products inner join productProperties
    on (products.id = productProperties.product)
 where (property = 'weight' and value = '10')
    or (property = 'color' and value = 'blue')
 group by product, name
having count(1) = 2

Another option with subqueries:

select id, name
  from products p
 where exists (
         select 1
           from productProperties pp1
          where p.id = pp1.product 
            and pp1.property = 'weight'
            and value = '10'
       )
   and exists (
         select 1
           from productProperties pp2
          where p.id = pp2.product 
            and pp2.property = 'color'
            and value = 'blue'
       )


SELECT * FROM productProperties p 
WHERE (SELECT COUNT(*) FROM productProperties p1 WHERE p1.product = p.product AND 
( (property = 'weight' AND value = '10') OR (property = 'color' AND value = 'blue') ) 
 =2
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜