2017-07-27 14 views
-1

私は2つのテーブル:FEATUREFEATURE_DETAILSを持っています。関係は1つ(FEATURE)から多く(FEATURE_DETAILS)です。1つだけ一致する場合はすべての行を選択

feature_details_id | feature_id 
1      1 
1      2 
1      4 
2      1 
2      2 
2      4 
2      5 
3      1 
3      5 

たとえば、 5?

feature_details_id | feature_id 
2      1 
2      2 
2      4 
2      5 
3      1 
3      5 
+1

http://www.oracle.com/technetwork/issue-archive/2012/12-mar/o22sql-1494267.html SQLに関する書籍を読む必要があります –

答えて

1
SELECT * FROM FEATURE_DETAILS WHERE feature_details_id IN (
    SELECT feature_details_id from FEATURE_DETAILS WHERE feature_id=5 
) 
2

最初FEATURE_IDいるfeature_deatails_idのリストは5で取得し、その結果

この

select * 
from FEATURE_DETAILS 
where feature_deatails_id in(
        select feature_deatails_id from FEATURE_DETAILS where feature_id = 5) 

または使用のようなものを試してみてください取得するfeature_deatails_idFEATURE_DETAILSにテーブルを渡しますMax()Over()ウィンドウ機能(推奨アプローチ)

select * from 
(
select max(case when feature_id = 5 then 1 else 0 end)over(partition by feature_deatails_id) as cnt, 
     feature_deatails_id,feature_id 
from FEATURE_DETAILS 
)s 
Where cnt = 1 
+0

「Max()」が優先されるのはなぜですか? –

+0

そのテーブルの@RossPresserは一度だけスキャンする必要があります.. –

関連する問題