2017-07-26 61 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 
    );