mysql 一对多表,MySQL:查询一对多表?

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'

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值