2017-07-27 114 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只能扫描一次.. –

相关问题