如果只匹配一个,则选择所有行

时间:2017-07-27 14:55:12

标签: sql oracle

我有两个表: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  

2 个答案:

答案 0 :(得分:2)

首先获取feature_id为5的feature_deatails_id列表,然后将feature_deatails_id传递给FEATURE_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

答案 1 :(得分:1)

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