2017-07-26 45 views
0

我有一个表格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或null如果没有。 所以输出应该是:

feature_deatails_id | feature_id 
1      null 
2      5 
+0

是的,忘了提--plsql – vpxfhu77

+2

PL/SQL是Oracle用来写存储的p语言rocedures。这不是数据库管理系统的名称 –

回答

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); 

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

  • 看到他们两人工作生活在一个sqlfiddle
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 
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