MySQL - 1toN,从table1中选择具有table2.attribute = 1 AND table2.attribute = 2的项目

时间:2013-09-17 09:32:45

标签: mysql subquery

我使用的是四个表,我将其称为“products”,“attributes_categories”,“attributes”和“product_has_attributes”。 “products”中的每个产品在“product_has_attributes”中都有许多属性,如下所示:

[product_has_attributes] : product1
attribute_id=1 (Brands->Sony)
attribute_id=4 (Screen size -> 20")
attribute_id=7 (Colors -> Black)
attribute_id=8 (Colors -> White)

products和product_has_attributes保留在products.id = product_has_attributes.product_id

一个简单的SELECT正确地返回每个产品的属性次数。

现在,我想选择所有产品:

product_has_attributes.attribute_id=1 AND 
product_has_attributes.attribute_id=4 AND 
(product_has_attributes.attribute_id=7 OR 
product_has_attributes.attribute_id=8)

但是,正如预期的那样,product_has_attributes.attribute_id不能同时为1 AND 4 AND(7 OR 8)......因此不会返回任何记录。

如何构建SQL以便它返回我描述的逻辑中的记录?

谢谢你, 乔治

1 个答案:

答案 0 :(得分:0)

你可以使用这样的东西。它的效率不高。

 select * from products 
 where product_id in (
     select product_id from product_has_attributes where attribute_id = 1
 )
 and product_id in (
     select product_id from product_has_attributes where attribute_id = 4
 )
 and product_id in (
     select product_id from product_has_attributes where attribute_id in (7, 8)
 )