2014-05-08 366 views
0

我一直在研究产品数据库模式,其中一个要求是,为了将产品视为已停产,必须将所有产品skus都设置为停产。MySQL选择具有相同列的所有值的记录吗?

Product Table: 
id 
slug 
name 

一个品到许多ProductSkus

ProductSku Table 
id 
slug 
name 
product_id 
product_sku_availability_id 

一个ProductSku到一个ProductSkuAvailability

ProductSkuAvaliability 
id 
slug 
name 

现在我并不真的需要一个准确的查询,但有没有办法只能选择所有productSkus.product_sku_availability都已停产的产品?这里是什么,我问一个示例:在上面的示例中

| productId | productSkuId | availabilityId | 
| 1   | 1   | 1    | 
| 1   | 2   | 1    | 
| 2   | 3   | 2    | 
| 2   | 4   | 1    | 

我只会想选择产品ID = 1,因为这两种产品SKU有1

+1

不知怎的,你的'ProductSkuAvaliability'表看起来有点不对。但具有'HAVING MIN(availabilityId)= 1 AND MAX(availabilityId)= 1'的'GROUP BY productId'应该这样做。 – VMai

+0

你是对的,它的作品!如果您想将您的评论格式化为答案,我会将其标记为正确。 –

回答

1

的availabilityId如果值了列的availabilityId对每个productId都有相同的值,然后是最大值和最小值相等。正因为如此应一个

GROUP BY productId 

HAVING (MIN(availabilityId) = 1 AND MAX(availabilityId) = 1) 

产生所需的结果。

相关问题