0

Oracleで、Feature1が必要で、少なくともFeature2またはFeature3から1つが必要な車を見つけるにはどうすればよいですか。サンプルテーブルと期待される結果は、以下のスクリーンショットのようになります。ありがとうキランここに画像の説明を入力してください

4

2 に答える 2

1

これは機能するはずです:

select t1.car, t1.feature
from yourtable t1
inner join
(  -- inner select returns the cars with the Feature1 and Feature2 or Feature3
  select car, feature
  from yourtable 
  where feature = 'Feature1'
    and exists (select car
                from yourtable 
                where feature in ('Feature2', 'Feature3'))
) t2
  on t1.car = t2.car
where t1.feature in ('Feature1', 'Feature2', 'Feature3') -- this excludes any other features

SQL FiddlewithDemoを参照してください

于 2012-09-07T14:34:26.620 に答える
0

私はGROUPBYとHAVINGでこれを行うのが好きです:

select car
from t
group by car
having max(case when feature = 'Feature1' then 1 else 0 end) = 1 and
       max(case when feature in ('Feature1', 'Feature2') then 1 else 0 end) = 1

このクエリは車を返します。featuersも取得するには、次の場所に参加する必要があります。

select t.*
from (select car
      from t
      group by car
      having max(case when feature = 'Feature1' then 1 else 0 end) = 1 and
             max(case when feature in ('Feature1', 'Feature2') then 1 else 0 end) = 1
     ) c join
     t
     on t.car = c.car

私はこの方法が好きです。同じアイデアを使用して、さまざまな類似のクエリ(AND条件、OR条件、さまざまなサブグループ、さまざまなカウント)を処理できるからです。

于 2012-09-07T14:56:46.503 に答える