仅当所有匹配条件都失败时才更新标志
Update a flag only if ALL matching condition fails
我正在尝试在 oracle 中编写查询以仅根据以下情况更新标志:
场景:
A mctn_id 与多个 PRPR_ID 链接,每个 PRPR_ID 可以有不同的地址,如果 [=21],我需要将 table 中的标志更新为 N =]ALL PRPR_ID 地址不属于配置 table 地址。如果其中任何一个属于配置 table 地址,那么它不应将标志更新为 N.
在这种情况下,我使用的是 not exists,这是行不通的。
update prcb_enroll_tbl
set prov_flg ='N',
sys_insert_dtm = systimestamp
where tin_number in (select mctn_id
from cc_pr_prov prpr
inner join cc_pr_addr prad
on prpr.prpr_id = prad.prad_id
and not exists (select 1
from fsg_prcb_config config
where prad.prad_addr1 = config.config_value)
即使只有一个地址属于配置 table,上述查询仍在更新标志,这不是预期的结果。
这应该是 not exists
。这是否符合您的要求?
update prcb_enroll_tbl pe
set prov_flg ='N', sys_insert_dtm = systimestamp
where not exists (
select 1
from cc_pr_prov pr
inner join cc_pr_addr pa on pr.prpr_id = pz.prad_id
inner join fsg_prcb_config pc on pc.config_value = pa.prad_addr1
where ??.mctn_id = pe.tin_number
)
不清楚 table 列 mctn_id
来自哪个,所以我使用了 ???
:你应该用正确的 table 别名替换它。
我正在尝试在 oracle 中编写查询以仅根据以下情况更新标志:
场景:
A mctn_id 与多个 PRPR_ID 链接,每个 PRPR_ID 可以有不同的地址,如果 [=21],我需要将 table 中的标志更新为 N =]ALL PRPR_ID 地址不属于配置 table 地址。如果其中任何一个属于配置 table 地址,那么它不应将标志更新为 N.
在这种情况下,我使用的是 not exists,这是行不通的。
update prcb_enroll_tbl
set prov_flg ='N',
sys_insert_dtm = systimestamp
where tin_number in (select mctn_id
from cc_pr_prov prpr
inner join cc_pr_addr prad
on prpr.prpr_id = prad.prad_id
and not exists (select 1
from fsg_prcb_config config
where prad.prad_addr1 = config.config_value)
即使只有一个地址属于配置 table,上述查询仍在更新标志,这不是预期的结果。
这应该是 not exists
。这是否符合您的要求?
update prcb_enroll_tbl pe
set prov_flg ='N', sys_insert_dtm = systimestamp
where not exists (
select 1
from cc_pr_prov pr
inner join cc_pr_addr pa on pr.prpr_id = pz.prad_id
inner join fsg_prcb_config pc on pc.config_value = pa.prad_addr1
where ??.mctn_id = pe.tin_number
)
不清楚 table 列 mctn_id
来自哪个,所以我使用了 ???
:你应该用正确的 table 别名替换它。