1

多対多の関係で、指定したすべての条件に一致するレコードのみを取得する必要があります。大幅に単純化されたテーブルは次のようになります

Catalog     Catalog_Types           Types
   1            1  1                  1
   2            1  2                  2
   3            2  1                  3
                2  3                  4
                2  4
                3  1
                3  4

1種類でカタログから選択するのは簡単ですが、1つ以上で選択する必要があります。たとえば、タイプ12を持つ行のみをカタログから取得する方法なので、1があり2がない場合は適していません.

ここで同様の質問と決定を見ましたが、SQLについてです。例外が使用されていたので、mySQL で equals に置き換えようとしましたが、mySQL はよくわかりません。

前もってありがとう、そして私の英語でごめんなさい

4

1 に答える 1

0

このタイプのクエリは「セット内のセット」と呼ばれます

2 つのタイプ (1 と 2) のカタログ ID を取得したいが、他のタイプがある可能性がある場合

SELECT catalog_id
  FROM catalog_type
 WHERE type_id IN (1, 2)
GROUP BY catalog_id
HAVING COUNT(DISTINCT type_id) = 2

正確に 2 つのタイプ(例: 1 と 2)のカタログ ID を確実に取得したい場合

SELECT catalog_id
  FROM catalog_type
GROUP BY catalog_id
HAVING SUM(type_id = 1) > 0
   AND SUM(type_id = 2) > 0
   AND COUNT(DISTINCT type_id) = 2;

3 つのタイプ(例: 1、2、4) のうち少なくとも 2 つを持つカタログ ID を取得する場合

SELECT catalog_id
  FROM catalog_type
 WHERE type_id IN (1, 2)
GROUP BY catalog_id
HAVING (MAX(type_id = 1)
      + MAX(type_id = 2)
      + MAX(type_id = 4)) >= 2

あなたがフォローしていると仮定してcatalog_type

| | CATALOG_ID | TYPE_ID |
------------------------
| | 1 | 1 |
| | 1 | 2 |
| | 2 | 1 |
| | 2 | 3 |
| | 2 | 4 |
| | 3 | 1 |
| | 3 | 2 |
| | 3 | 4 |

上記のクエリの出力例:

    クエリ 1 クエリ 2 クエリ 3

| | CATALOG_ID | | | CATALOG_ID | | | CATALOG_ID |
-------------- -------------- --------------
| | 1 | | | 1 | | | 1 |
| | 3 | | | 3 |

これらすべてのクエリのSQLFiddleデモを次に示します。見て、結果がどのように異なるかを確認してください。

于 2013-08-15T19:36:25.460 に答える