对一个sql的分析
select *
FROM LPEdorItem a, LCCont b, LPEdorApp c
WHERE a.edoracceptno = c.edoracceptno
and a.ContNo = b.ContNo
and b.appntno = '0000235356'
AND b.conttype = '1' --'2-集体总单,1-个人总投保单';
AND (c.AppType != '6' OR c.AppType is null) -- 申请方式
and a.edorvalidate >= trunc(sysdate) - 365
and a.edorvalidate <= trunc(sysdate)
and c.makedate between to_date('20190101', 'yyyy-mm-dd') and
to_date('20201117', 'yyyy-mm-dd')
and b.familytype <> '1'
and (case
when a.edorstate in ('0', 'j', '4', '9', 'c', 'd') and
(not exists (select 1
from ljaget t
where t.otherno = a.edoracceptno
and t.confdate is null
and t.sumgetmoney <> 0) or EXISTS
(SELECT 1
FROM LJMONETARYSTERILIZATIONB LJM
WHERE LJM.OTHERNO = A.contno)) then
'1'
else
'0'
end) = '1'
简化
-->>>>这两个是等同的
select *
from LPEdorItem a
where (case
when a.edorstate in ('0', 'j', '4', '9', 'c', 'd')then
'1'
else
'0'
end) = '1'
--------------------------------------------------------------------------------
select * from LPEdorItem a where a.edorstate in ('0', 'j', '4', '9', 'c', 'd')
解释: { when 条件 then '1'}= '1' 这等同于where条件 where a.edorstate in ('0', 'j', '4', '9', 'c', 'd')
select *
from LPEdorItem a
where (not exists (select 1
from ljaget t --实付总表
where t.otherno = a.edoracceptno
and t.confdate is null --财务确认日期
and t.sumgetmoney <> 0) --总给付金额
or EXISTS
(SELECT 1
FROM LJMONETARYSTERILIZATIONB LJM
WHERE LJM.OTHERNO = A.contno))
再简化
浙公网安备 33010602011771号