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

Ulr*_*dle 1 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
Run Code Online (Sandbox Code Playgroud)

我想得到所有有flag_id 1,51和23的产品.

Mah*_*mal 5

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

这个问题叫做关系部门.解决它的一种方法是这样做:

  • 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
Run Code Online (Sandbox Code Playgroud)

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

在这里看到它:

这只会给你:

| PRODUCT_ID |
--------------
|          1 |
Run Code Online (Sandbox Code Playgroud)