2017-07-26 46 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