【发布时间】:2014-08-06 08:50:14
【问题描述】:
我正在使用查询从两个表中检查更改的叶子:-
with present_day
as
(
select 1 as emp_id,'Sick Leave' as code , 9 as net_entitlement from dual
union
select 2 as emp_id,'Privilege Leave' as code , 5 as net_entitlement from dual
union
select 3 as emp_id,'Sick Leave' as code , 5 as net_entitlement from dual
union
select 5 as emp_id,'Sick Leave' as code , 10 as net_entitlement from dual
),
yester_day
as
(
select 1 as emp_id,'Sick Leave' as code , 10 as net_entitlement from dual
union
select 2 as emp_id,'Privilege Leave' as code , 5 as net_entitlement from dual
union
SELECT 3 AS EMP_ID,'Sick Leave' AS CODE , 6 AS NET_ENTITLEMENT FROM DUAL
UNION
SELECT 4 AS EMP_ID,'Sick Leave' AS CODE , 6 AS NET_ENTITLEMENT FROM DUAL
)
select a.emp_id,a.code,
a.net_entitlement
from present_day a,
YESTER_DAY B
WHERE A.EMP_ID=B.EMP_ID
AND A.CODE=B.CODE
and a.net_entitlement<>b.net_entitlement
在这个查询中,那些细节即将发生变化,但我需要那些昨天存在而不是现在的行,反之亦然......如何去做?
上面的查询给出了输出:-
emp_id code net_entitlement
1 Sick Leave 9
3 Sick Leave 5
需要的输出是:
emp_id code net_entitlement
1 Sick Leave 9
3 Sick Leave 5
4 Sick Leave 6
5 Sick Leave 10
我尝试使用 Union,但如果我使用,性能会受到影响:-
UNION
select a.emp_id,a.code,
a.net_entitlement
from present_day a,
YESTER_DAY B
WHERE A.EMP_ID NOT IN B.EMP_ID
or B.EMP_ID NOT IN A.EMP_ID;
【问题讨论】: