如果所有条件都满足sql如何选择记录

时间:2019-03-16 09:49:42

标签: sql

我有两个表stage和hier table 阶段表:

POL_NO  AGENT   COMPANY_CODE
100      001        01
101      002        01
102      003        01
103      004        01

餐桌:

PAY_REASON  PAY_CODE    AGENCY_CODE FINANCIAL_AGENT COMPANY_CODE    AGENT
S               BO           -             -            01           001
P               -            H                          01           001
-               -            B             -            01           001
S               BO           B            420           01           002
S               BO           -             -            01           002
S               BO           -             -            01           003
P               DD           U             -            01           003
-               -            B             -            01           003
-               -            B             -            01           004
-               -            B             -            01           004
-               -            -            420           01           004

阶段表将与基于(company_code和代理)的层次表进行比较,以查看层次表中是否满足以下条件:

1.(pay_reason='S'and pay_code='BO') or agency_code in ('B','H','U')
2.Financial agent!=420

如果hier表中的任何记录不符合条件,则company_code和agent将不会出现在预期结果中

预期结果:

POL_NO  AGENT   COMPANY_CODE
100      001        01
102      003        01

2 个答案:

答案 0 :(得分:0)

您快到了:

Select *
From stage s
where not exists (
select *
from hier h
where s.AGENT = h.AGENT
And s.COMPANY_CODE = h.COMPANY_CODE
and not(((pay_reason='S'and pay_code='BO') or agency_code in ('B','H','U'))
and Financial_agent!=420))

答案 1 :(得分:0)

如果我正确理解条件,您似乎想要:

select *
from stage s
where not exists (select 1
                  from hier h
                  where s.agent = h.agent and
                        s.company_code = h.company_code and
                        h.Financial_agent = 420 and
                        not ( (h.pay_reason = 'S' and pay_code = 'BO') or
                               h.agency_code in ('B', 'H', 'U')                    
                            )
                 );