2017-07-26 60 views
1

我有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。所以結果應該是:

feature_deatails_id | feature_id 
1      null 
+0

什麼問題?你能告訴我們你目前的說法嗎? –

+1

表格之間的關係在哪裏?您的示例看起來像只有一個表格 –

+0

@OtoShavadze 表格之間的關係是一個(FEATURE)到許多(FEATURE_DETAILS)。 具有功能的Tabel包含feature_id作爲PK和詳細信息。 – vpxfhu77

回答

0

這應該解決您的目的

with data as (
      select 1 as feature_details_id, 1 feature_id from dual 
    union select 1,2 from dual 
    union select 1,4 from dual 
    union select 2,1 from dual 
    union select 2,2 from dual 
    union select 2,4 from dual 
    union select 2,5 from dual 
) 
select distinct feature_details_id, NULL feature_id from data 
where feature_details_id not in (
     select feature_details_id from data 
     where feature_id = 5) 
; 

什麼上面的查詢需要做的是 -

  1. 選擇feature_details_id其中feature = 5
  2. 刪除所有那些feature_details_id並選擇剩下的東西
+1

請記住,在'NULL'出現'NOT IN'「類似的」行爲不當「,因此,作爲一般建議:a)更喜歡它的」NOT EXISTS「等效性(我的個人偏好,因爲」它只是起作用「)或者b)爲'NOT IN'表達式中涉及的每一列添加適當的'AND FOO IS NOT NULL'過濾器,除非該列已經具有'NOT NULL'約束 – gpeche

-2

選擇feature_deatails_id,null作爲FEATURE_ID 從feature_details 其中FEATURE_ID!= 5

這應該解決您的目的。

+0

這不起作用。 –

0

隨着NOT IN應該沒問題

SELECT DISTINCT FEATURE_DETAILS_ID, NULL AS FEATURE_ID 
    FROM FEATURE_DETAILS 
    WHERE FEATURE_DETAILS_ID NOT IN (
     SELECT FEATURE_DETAILS_ID FROM FEATURE_DETAILS WHERE FEATURE_ID = 5 
    );