Sql Oracle复杂选择查询
我需要Oracle中select语句的帮助。由于某些并发症,我不寻找程序等,我需要执行一个单一的选择这一点 部门: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_
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')