从MySQL中的多行中选择一个值

时间:2013-07-04 10:58:58

标签: mysql sql attributes

我的SQL句子有点问题。我有一个带有product_id和flag_id的表,现在我想获得与指定的所有标志匹配的product_id。我知道你必须自己加入它,以匹配多个,但我不知道它的确切SQL。

标志表

   product_id | flag_id
   1            1
   1            51
   1            23
   2            1
   2            51
   3            1

我想获得所有拥有flag_id 1,51和23的产品。

4 个答案:

答案 0 :(得分:5)

  

获取 匹配所有 指定标志的product_id

此问题称为Relational Division。解决问题的一种方法是:

  • GROUP BY product_id
  • 使用IN谓词指定要匹配的标记。
  • 使用HAVING子句确保每个产品都有标记
像这样:

SELECT product_id
FROM flags
WHERE flag_id IN(1, 51, 23)
GROUP BY product_id
HAVING COUNT(DISTINCT flag_id) = 3

HAVING子句将确保所选的product_id必须同时包含三个标志,如果只有一个或两个标志将被删除。

请在此处查看:

这只会给你:

| PRODUCT_ID |
--------------
|          1 |

答案 1 :(得分:0)

试试这个:

SELECT *
FROM your_table
WHERE flag_id IN(1,2,..);

答案 2 :(得分:0)

首先,如果您可以指定之前尝试过的内容会有所帮助,但据我所知,您需要获得带有特定标记的产品,因此您只需使用WHERE

SELECT product_id FROM Product WHERE flag_id IN (1,2,3,4,5)

答案 3 :(得分:0)

尝试:

SELECT *
FROM TABLE_NAME A INNER JOIN TABLE_NAME B ON A.product_id = B.product_id