我想在一个表格中找到一个部门ID列表,(PS_Y_FORM_HIRE
),但不存在于另一个表格中PS_DEPARTMENT_VW
)。
以下是我的工作基础:
SELECT h.DEPTID FROM PS_Y_FORM_HIRE h, PS_DEPARTMENT_VW d WHERE NOT EXISTS (
SELECT d1.DEPTID FROM PS_DEPARTMENT_VW d1 WHERE d1.DEPTID = h.DEPTID
and d1.SETID_GL_DEPT = 'IDBYU'
);
我试图在SQL Developer中构建此查询,但它只返回一长串空白(在旋转/运行查询很长时间之后)。
另外,我需要这个有效的日期,所以它只抓取正确的有效日期行,但我不确定如何以及在何处将此结合到查询中。
编辑我忽略了仅部门表生效日期。表格租用表不是。我需要从此查询中获取当前有效日期行(以确保数据准确)。
另请注意,DEPTID
不是PS_Y_FORM_HIRE
上的密钥,而是PS_DEPARTMENT_VW
上的密钥。 (以及SETID_GL_DEPT
和EFFDT
)。
所以,理想情况下,我会列出PS_Y_FORM_HIRE
中显示但不在PS_DEPARTMENT_VW
中的所有部门ID。
答案 0 :(得分:3)
SELECT DEPTID
FROM PS_Y_FORM_HIRE
MINUS
SELECT DEPTID
FROM PS_DEPARTMENT_VW
WHERE SETID_GL_DEPT = 'IDBYU';
或
SELECT DEPTID
FROM PS_Y_FORM_HIRE
WHERE DEPTID NOT IN (
SELECT DEPTID
FROM PS_DEPARTMENT_VW
WHERE SETID_GL_DEPT = 'IDBYU'
)
或
SELECT DEPTID
FROM PS_Y_FORM_HIRE h
WHERE NOT EXISTS (
SELECT 1
FROM PS_DEPARTMENT_VW d
WHERE SETID_GL_DEPT = 'IDBYU'
AND d.DEPTID = h.DEPTID
)
答案 1 :(得分:1)
这似乎是MINUS行动的一项工作。像
这样的东西select deptid from ps_y_form_hire where eff_date = <whatever>
minus
select deptid from ps_department_vw <where eff_date = ...>
您没有提供信息来确定您希望在哪些方面完成有效日期;根据需要进行调整。
答案 2 :(得分:1)
SELECT h.DEPTID
FROM PS_Y_FORM_HIRE h
WHERE h.DEPTID NOT IN (SELECT p.DEPTID
FROM PS_DEPARTMENT_VW p
WHERE p.SETID_GL_DEPT = 'IDBYU')
答案 3 :(得分:0)
您的问题有点不明确,为什么您需要有效的日期行,因为您没有检查有效状态或有效行之间可能已更改的任何其他字段。如果您的问题是,您想知道PS_Y_FORM_HIRE中的所有DEPTID在当前生效日期之前不存在或处于非活动状态,那么下面的SQL应该有帮助
SELECT DEPTID
FROM PS_Y_FORM_HIRE h
WHERE
H.DEPTID NOT IN ( SELECT d.DEPTID
FROM PS_DEPARTMENT_VW d
WHERE d.EFF_STATUS = 'A'
AND d.EFFDT = (SELECT MAX(EFFDT)
FROM PS_DEPARTMENT_VW d2
WHERE d2.SETID_GL_DEPT = d.SETID_GL_DEPT
AND d2.DEPTID = d.DEPTID
AND d2.EFFDT <= CURRENT_DATE)
)