Oracle复杂选择查询

时间:2017-07-13 04:57:50

标签: sql oracle select

我需要Oracle中select语句的帮助。由于某些复杂性,我不是在寻找程序等。我需要通过一次选择来执行此操作。

部门:

Dept_ID   
-------    
101      
102   

DepartmentFGStatus:

Dept_ID | FG_ID          
------- | -------          
  101   |   ABC  
  101   |   XYZ  
  102   |   ABC  

CCFGMap:

CC_ID | FG_Applicable | FG_ID  
------| ------------- | -------  
FIN   |   Y           |   ABC  
HR    |   N           |   XYZ  
ACI   |   N           |                         

CCStatus:

CC_ID | Status  
------| -------   
FIN   |   01  
HR    |   03  
ACI   |   05 

需要具有以下标准的Department表中所有Dept_ID的列表:

  

该Dept_ID的DepartmentFGStatus表中的所有FG_ID都应该有   FG_Applicable ='Y',相应CC_ID的状态应为01

例如:在上面的例子中,我只需输出Dept 102。 101不符合条件,因为它XYZFG_ID FG_Applicable = 'N'

2 个答案:

答案 0 :(得分:0)

您应该使用内部联接

  SELECT d.Dept_ID
  FROM Department d
  INNER JOIN  DepartmentFGStatus dfs on dfs.Dept_ID = d.Dept_ID
  INNER JOIN  CCFGMap m on m.fg_id = dfs.FG_ID and m.FG_Applicable ='Y'
  INNER JOIN  CCStatus s on m.CC_ID =s.CC_ID and s.status ='01'

答案 1 :(得分:0)

您可以尝试这样的事情:

Select 
    d.Dept_ID
from 
    Department d
inner join DepartmentFGStatus dfgs
    on d.Dept_ID = dfgs.Dept_ID
where exists (
    select 
        cm.FG_ID 
    from 
        CCFGMap cm
        inner join CCStatus cs
            on cm.CC_ID = cs.CC_ID 
            and cs.Status = '01'
    where
        FG_Applicable = 'Y'
        and cm.FG_ID = dfgs.FG_ID
)