我如何 select 一个 table 中存在但另一个中不存在的所有 id
How do I select all id's that are present in one table but not in another
我正在尝试获取一个 table、(PS_Y_FORM_HIRE
)中存在的部门 ID 列表,但在另一个 table([=14)中不存在=]).
这是我所拥有但不起作用的基础知识:
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 中形成这个查询,但它只是 returns 一长串空白(在 spinning/running 查询很长时间之后)。
此外,我需要它有生效日期,以便它只抓取正确的生效日期行,但我不确定如何以及在何处将其合并到查询中。
编辑 我忘记提到 只有 部门 table 是有效日期。表格 hire table 不是。我需要从此查询中获取当前有效日期的行(以确保数据准确)。
另请注意,DEPTID
不是 PS_Y_FORM_HIRE
上的键,而是 PS_DEPARTMENT_VW
上的键。 (连同 SETID_GL_DEPT
和 EFFDT
)。
所以,再一次,理想情况下,我将列出出现在 PS_Y_FORM_HIRE
中但不在 PS_DEPARTMENT_VW
中的所有部门 ID。
这似乎是 MINUS 操作的工作。像
select deptid from ps_y_form_hire where eff_date = <whatever>
minus
select deptid from ps_department_vw <where eff_date = ...>
您没有提供信息来确定您到底想对生效日期做什么;根据需要进行调整。
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
)
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')
你的问题有点不清楚为什么你想要有效的日期行,因为你没有检查有效状态或任何其他可能在有效行之间发生变化的字段。如果您的问题是,您想知道 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)
)
我正在尝试获取一个 table、(PS_Y_FORM_HIRE
)中存在的部门 ID 列表,但在另一个 table([=14)中不存在=]).
这是我所拥有但不起作用的基础知识:
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 中形成这个查询,但它只是 returns 一长串空白(在 spinning/running 查询很长时间之后)。
此外,我需要它有生效日期,以便它只抓取正确的生效日期行,但我不确定如何以及在何处将其合并到查询中。
编辑 我忘记提到 只有 部门 table 是有效日期。表格 hire table 不是。我需要从此查询中获取当前有效日期的行(以确保数据准确)。
另请注意,DEPTID
不是 PS_Y_FORM_HIRE
上的键,而是 PS_DEPARTMENT_VW
上的键。 (连同 SETID_GL_DEPT
和 EFFDT
)。
所以,再一次,理想情况下,我将列出出现在 PS_Y_FORM_HIRE
中但不在 PS_DEPARTMENT_VW
中的所有部门 ID。
这似乎是 MINUS 操作的工作。像
select deptid from ps_y_form_hire where eff_date = <whatever>
minus
select deptid from ps_department_vw <where eff_date = ...>
您没有提供信息来确定您到底想对生效日期做什么;根据需要进行调整。
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
)
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')
你的问题有点不清楚为什么你想要有效的日期行,因为你没有检查有效状态或任何其他可能在有效行之间发生变化的字段。如果您的问题是,您想知道 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)
)