如果一条记录包含某个值,如何排除整个组?

时间:2019-01-09 04:00:41

标签: sql oracle

这是我的桌子:

TableA      
primarykey  Name    Description 
1           John    Male 
2           Josh    Male 
3           Allen   Male 

TableB      
projectid   Name    Category 
1           John    QB
1           John    RB
1           John    WR
2           Josh    QB
2           Josh    WR
3           Allen   QB 

我希望查询将两个表组合在一起,但是我只想在其中一个记录没有'RB'的情况下使用记录。

我在下面有一个常规查询

Select * from TableA a, TableB b, where a.primarykey = projectid
projectid   Name    Category    Description
1           John    QB          Male
1           John    RB          Male
1           John    WR          Male
2           Josh    QB          Male
2           Josh    WR          Male
3           Allen   QB          Male

但是我不确定如果它有'RB'怎么排除所有记录。

这就是我希望得到的结果:

projectid   Name    Category    Description
2           Josh    QB          Male
2           Josh    WR          Male
3           Allen   QB          Male

有关尝试使用此工具的任何提示或建议?

2 个答案:

答案 0 :(得分:4)

您可以通过这种方式利用join不存在的情况,以确保没有任何以“ RB”作为类别的ID。

select t1.projectId, t1.name, t1.category, t.description from tableA  t 
join tableB t1 on t1.projectid = t.primarykey 
where not exists (select 1 from tableB t2 where t1.projectID = t2.projectID and t2.category = 'RB') 
order by t1.projectID ;


PROJECTID   NAME    CATEGORY    DESCRIPTION
 2           Josh      WR        Male
 2           Josh      QB        Male
 3           Allen     QB        Male

答案 1 :(得分:1)

这可能是使用WHERE子句中的子查询来完成此操作的一种方法

select b.projectid,b.Name,b.Category,a.Description
from TableA a,TableB b
where a.primarykey=b.projectid   
  and
  a.primarykey <> ( select projectid from tableb b  where b.category ='RB');