2017-07-27 88 views
-1

我有兩個表格:FEATUREFEATURE_DETAILS。關係是一個(FEATURE)與許多(FEATURE_DETAILS)。如果只有一個匹配,請選擇所有行

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_deatails_id針對FEATURE_ID是5的列表,然後通過feature_deatails_idFEATURE_DETAILS表得到的結果

嘗試是這樣的

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

或使用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()Over()'優先? –

+0

該表中的@RossPresser只能掃描一次.. –

相關問題