选择符合条件但不符合标准的行

时间:2017-07-26 10:58:42

标签: sql oracle

我有一个表FEATURE和FEATURE_DETAILS FEATURE_DETAILS可以有很多功能。

  FEATURE_DETAILS
  feature_deatails_id | feature_id
  1                        1
  1                        2
  1                        4 
  2                        1
  2                        2
  2                        4
  2                        5

我在选择feature_deatails_id时有一个拦截器,例如5 feature_id OR null缺席。 所以输出应该是:

feature_deatails_id | feature_id
1                     null
2                     5

3 个答案:

答案 0 :(得分:0)

例如,如果列符合您的条件,您可以返回该列的值。

select
feature_details_id
, max(case when feature_id = 5 then feature_id else null) as feature_id
from table
group by feature_details_id

或者你可以像下面这样做。选择每个可能的feature_detail_id,然后左键加入结果:

select * from 
(
select distinct
feature_details_id
from table
) a left join (
select feature_details_id, feature_id 
from table
where feature_id = 5
group by feature_details_id
) b using (feature_details_id);

注意:第一种方法在性能方面要好得多。第二种方法更多是为了理解和学习。

答案 1 :(得分:0)

例如

select feature_deatails_id, min(case feature_id when 5 then feature_id end) feature_id
from my_table
group by feature_details_id 

答案 2 :(得分:0)

你也可以自己加入表格,像这样使用它

select distinct f1.feature_deatails_id, f2.feature_id 
       from FEATURE_DETAILS f1
LEFT JOIN FEATURE_DETAILS f2 on f1.feature_deatails_id = f2.feature_deatails_id 
                             and f2.feature_id = 5