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 を取得します

この問題は関係分割と呼ばれます。それを解決する1つの方法は、これを行うことです:

  • 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たものが 3 つのフラグの両方を持つ必要があることを保証します。フラグが 1 つまたは 2 つしかない場合は削除されます。

ここで実際にそれを見てください:

これにより、次のものが得られます。

| 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 に答える