Oracleで、Feature1が必要で、少なくともFeature2またはFeature3から1つが必要な車を見つけるにはどうすればよいですか。サンプルテーブルと期待される結果は、以下のスクリーンショットのようになります。ありがとうキラン
質問する
435 次
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 に答える