1

pro_id | Category
--------+---------
  25   | electronics
  27   | Electrical
  25   | household
  27   | electronics
  25   | industrial

上記は私のデータベーステーブルです。結果をカテゴリ別にフィルタリングしたい。「エレクトロニクス」が選択されたカテゴリの場合、結果には製品 ID 25 と 27 が含まれているはずです。これは簡単です。しかし、複数のカテゴリでフィルタリングしたい。たとえば、「電気製品」と「家庭用」を選択すると、結果は製品 ID 25 のみになるはずです。

4

3 に答える 3

2

両方の基準に一致する製品のみが必要な場合は、HAVING句が必要です...

SELECT
      p.pro_id
   FROM       
      prod p
   where
      p.category in ('electronics', 'household')
   having
      count(*) = 2

これの利点は、3つ以上のカテゴリが必要な場合、それらを「IN」句に追加し、カウントを3、4などに変更するだけです...

于 2012-06-16T13:20:29.757 に答える
2

ここで例を参照してください: http://sqlfiddle.com/#!2/09028/7

テーブルを pro_id で結合し、カテゴリでフィルタリングして、両方のカテゴリを持つすべての製品を選択します。

SELECT prod1.pro_id
FROM       prod AS prod1
INNER JOIN prod AS prod2 ON prod1.pro_id = prod2.pro_id
WHERE prod1.Category = 'electronics'
  AND prod2.Category = 'household';

少なくとも 1 つのカテゴリを持つすべての製品を選択してください:

SELECT prod.pro_id
FROM  prod
WHERE prod.Category = 'electronics'
   OR prod.Category = 'household'
GROUP BY prod.pro_id;
于 2012-06-15T19:39:36.020 に答える
0

いいえ、同じカテゴリ名を共有する複数の ID があるため、そうすべきではありません。必要なものを取得する唯一の方法は、各レコードを一意に識別する別のフィールドを用意することです。そうしないと、データの繰り返しで混乱してしまいます。

于 2012-06-15T19:46:30.637 に答える