您好我有一个表,看起来像这样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
。
有人可以告诉我一个如何格式化这个查询的例子吗?
您好我有一个表,看起来像这样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
。
有人可以告诉我一个如何格式化这个查询的例子吗?
我不明白关于“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)
为了得到既具有功能的所有产品,您可以使用一个子查询,然后使用Group By
和Having
- 条款仅返回具有这两种功能的产品(假设productId, featureId
在您的表中是唯一的)。
Select productId
From (
Select productId
From your_table
Where featureId In (16, 25)
)
Group By productId
Having Count(*) = 2
我的意思是声明将导致productid 1,因为它具有特征16和25 – user344766 2010-05-19 06:45:51