Sql Oracle复杂选择查询

Sql Oracle复杂选择查询,sql,oracle,select,Sql,Oracle,Select,我需要Oracle中select语句的帮助。由于某些并发症,我不寻找程序等,我需要执行一个单一的选择这一点 部门: Dept_ID ------- 101 102 部门状况: Dept_ID | FG_ID ------- | ------- 101 | ABC 101 | XYZ 102 | ABC CCFGMap: CC_ID | FG_Applicable | FG_

我需要Oracle中select语句的帮助。由于某些并发症,我不寻找程序等,我需要执行一个单一的选择这一点

部门:

Dept_ID   
-------    
101      
102   
部门状况:

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           |                         
CCP状态:

CC_ID | Status  
------| -------   
FIN   |   01  
HR    |   03  
ACI   |   05 
需要部门表中具有以下条件的所有部门ID的列表:

该部门ID的DepartmentFGStatus表中的所有FG_ID应具有 FG_适用=‘Y’,相应CC_ID的状态应为01


例:在上面的例子中,我只需要输出中的
dept102
。101不合格,因为它具有
XYZ
作为
FG\u ID
的属性,对于该属性
FG\u applicative='N'

您应该使用内部联接

  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'

您可以尝试以下方法:

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
)

请设置表格间距的格式,这样会更清晰。您尝试过什么吗?谢谢鲁道夫,不过上面返回了两个部门。在上面的示例中,我只需要输出中的dept102。101不合格,因为它的FG_ID为XYZ,FG_applicative='N'Hi,exists应根据该标志筛选出这些记录,您确定只有一条标志设置为'Y'的记录吗?上述查询同时返回部门101和102。无法更好地检查您的数据。。(条件m.fg_id=dfs.fg_id和m.fg_applicative='Y'选择jiust one row-->FIN和m.CC_id=s.CC_id和s.status='01')