mySQL: Querying one-to-many -table?

社会主义新天地 提交于 2019-12-08 04:42:52

问题


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

回答1:


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'
       )



回答2:


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


来源:https://stackoverflow.com/questions/4328126/mysql-querying-one-to-many-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!