2010-05-19 58 views
1

您好我有一个表,看起来像这样MySQL的选择帮助

id : productid : featureid 
(1, 1, 16) 
(2, 1, 21) 
(3, 1, 25) 
(4, 2, 16) 
(5, 2, 21) 
(6, 2, 27) 

其中FEATUREID是一个外键到另一个表。

我需要选择具有16和25两个特征的产品,在这个例子中,这将是productid 1而不是productid 2

有人可以告诉我一个如何格式化这个查询的例子吗?

回答

1

我不明白关于“productid 1”而不是productid 2“的最后声明。

我还没有测试此代码,但你可以做这样的事情:

SELECT a.* FROM `products` AS a INNER JOIN `products` AS b ON (a.`productid` = b.`product_id` WHERE `featureid` = 25) WHERE a.`featureid` = 16 

SELECT * FROM `products` WHERE `featureid` = 16 AND `product_id` IN (SELECT `productid`FROM `products` WHERE `featureid` = 25) 
+0

我的意思是声明将导致productid 1,因为它具有特征16和25 – user344766 2010-05-19 06:45:51

2

为了得到既具有功能的所有产品,您可以使用一个子查询,然后使用Group ByHaving - 条款仅返回具有这两种功能的产品(假设productId, featureId在您的表中是唯一的)。

Select productId 
From (
    Select productId 
    From your_table 
    Where featureId In (16, 25) 
) 
Group By productId 
Having Count(*) = 2