我有下面的查询,它没有返回预期的输出结果。对于值为NAME
的{{1}}列,它应检查'PL'
表中包含M_LOG
和NAME
列值组合的数据,并检查此组合值是否存在于E_ID
表。如果它不存在,则查询应仅返回那些组合值。
目前,查询返回DIR_LOG
表中已存在的所有组合值。我想我在某个地方缺少小条件是查询。
M_LOG
答案 0 :(得分:1)
查询类似于“所有没有员工的部门”
解决此问题的常用方法是使用相关子查询。简单来说,使用示例模式scott
,表,这是一个示例:
SELECT
d.deptno
FROM
dept d
WHERE
NOT EXISTS (
SELECT
1
FROM
emp e
WHERE
e.deptno = d.deptno
);
而不是像这样的方法(与你的方法有些对应):
SELECT
d.deptno
FROM
dept d
JOIN emp e ON d.deptno != e.deptno;
你需要采取这样的方法:
SELECT
MAX(ml.name),
ml.e_id,
CASE --If the day of the month is the 1st, 2nd or 3rd then it will use the last day of the previous month otherwise it will use the last day of the current month
WHEN EXTRACT(DAY FROM SYSDATE) <= 3 THEN trunc(SYSDATE,'MM') - INTERVAL '1' DAY
ELSE last_day(trunc(SYSDATE) )
END,
1,
'M1'
FROM
dir_log ml
WHERE
1 = 1
AND ml.name = 'PL'
NOT EXISTS (
SELECT
1
FROM
m_log md
WHERE
ml.name = md.name
AND ml.e_id = md.e_id
)
GROUP BY
ml.e_id,
CASE
WHEN EXTRACT(DAY FROM SYSDATE) <= 3 THEN trunc(SYSDATE,'MM') - INTERVAL '1' DAY
ELSE last_day(trunc(SYSDATE) )
END,
1,
'M1'
;
已修改分组依据以包括选择中的所有非聚合值。