1

我的 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

4 回答 4

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

HAVING子句将确保所选product_id必须同时具有三个标志,如果它只有其中一个或两个,它将被淘汰。

在这里查看它的实际效果:

这只会给你:

| PRODUCT_ID |
--------------
|          1 |
于 2013-07-04T11:00:42.367 回答
0

试试这个:

SELECT *
FROM your_table
WHERE flag_id IN(1,2,..);
于 2013-07-04T11:00:54.370 回答
0

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

SELECT product_id FROM Product WHERE flag_id IN (1,2,3,4,5)
于 2013-07-04T11:02:06.043 回答
0

尝试:

SELECT *
FROM TABLE_NAME A INNER JOIN TABLE_NAME B ON A.product_id = B.product_id
于 2013-07-04T11:09:57.597 回答