-1

我有这张表,我想得到下面的结果

prod_feat_val Table:

**id**    **prod_id**   **feat_id**      **value**
   1         34             20          touch screen
   2         34             25            stamina
   3         34             27           Android 1.6

   4         12             20             keypad
   5         12             27             android

   6         45             20              touch
   7         45             27             android 4

我想通过搜索特征值(值)来查询返回 prod_id(s)。示例:搜索具有 android 操作系统和触摸屏键盘的项目..这意味着返回:

 prod_id
    34
    45

我的查询如下:

SELECT prod_id FROM prod_feat_val 
WHERE 
(feat_id = '27' AND value Like '%android%' ) AND (feat_id = '20' AND value Like '%touch%')
GROUP BY prod_id

我认为我的查询基本上是错误的,知道吗?如果我用 OR 替换中间的 AND 那么我的结果可能会损坏(返回 34,12,45 ::: 它的坏)......

4

2 回答 2

1

你应该使用这样的东西:

SELECT prod_id
FROM prod_feat_val 
WHERE 
  (feat_id = '27' AND value Like '%android%' )
  OR (feat_id = '20' AND value Like '%touch%')
GROUP BY
  prod_id
HAVING
  COUNT(DISTINCT feat_id)=2

由于您要查找的功能位于不同的行上,因此您需要使用 OR。

然后你需要按 product_id 分组并计算不同特征的数量,它必须是 2。

于 2013-07-06T16:15:01.273 回答
0

它必须是 OR 但你拼错了touch

您还声明您希望结果为 34、45,但您的查询正在搜索 27 和 20。

您可以使用SELECT DISTINCT prod_id而不是 GROUP BY 但这没什么大不了的。

于 2013-07-06T15:50:16.533 回答