exists 对比

wjsq0705 2016-11-16 04:09:11
select distinct frrr1.id_bill,
frrr1.id_info_detail,
frrr1.pc_no,
frrr1.id_visit,
frrr1.insurance_amount,
frrr1.medical_org_code,
frrr1.insurance_type,
frrr1.region_code,
frrr1.area_code,
frrr1.settle_date,
frrr1.detail_sum_amount,
frrr1.out_hosp_date,
frrr1.in_hosp_date,
fbid.fund_pay_amount
from fwa_rule_run_result frrr1, fwa_bill_info_detail fbid
where 1 = 1
and frrr1.id_info_detail = fbid.id_info_detail
--条件一
and exists (select 1
from fwa_rule_base frb
where frb.rule_id = frrr1.rule_id
and frb.rule_granularity = '2')
--条件二
and not exists (select 1
from fwa_rule_run_result frrr2
where 1 = 1
and frrr2.id_bill = frrr1.id_bill
and exists
(select 1
from fwa_rule_base frb
where frb.rule_id = frrr2.rule_id
and frb.rule_granularity <> '2'))

谁能告诉我两个条件有啥区别。。。这两个条件给我的感觉就是:条件一,我要的答案在2中。条件二,我要的答案不能不在2中。
why?
语句写的也稍复杂,可能小弟没看懂,哪位大神给解释下。
...全文
179 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sych888 2016-11-16
  • 打赏
  • 举报
回复
你能发两条记录看看吗? 一条记录是:不加条件二查询出来的,列出rule_id ,rule_granularity的值 一条记录是:加上条件二,找出一条不在刚才不加条件二集合中的记录,也列出 列出rule_id ,rule_granularity的值
sych888 2016-11-16
  • 打赏
  • 举报
回复
引用 4 楼 sych888 的回复:
[quote=引用 3 楼 wjsq0705 的回复:] [quote=引用 2 楼 sych888 的回复:] 查询出的结果满足 条件一:在fwa_rule_base 表中存在ID相同并且有rule_granularity = '2'的记录 条件二:可以分两步理解 第一步:select 1 from fwa_rule_run_result frrr2 where 1 = 1 and exists (select 1 from fwa_rule_base frb where frb.rule_id = frrr2.rule_id and frb.rule_granularity <> '2') 查询出fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录 第二步:排除fwa_rule_run_result 存在符合条件的记录
多谢回答, 但是条件二排除(fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录), 剩下的不就是rule_granularity= '2'的吗,那不就是条件一了吗? 那为什么整条语句两个条件都要加?有本质区别吗?[/quote] 去掉条件二的结果和加上条件二的结果是不是一样?[/quote] fwa_rule_base表整个集合应该分三类: 1、=2 的一类 2、<>2的一类 3、NULL的一类
wjsq0705 2016-11-16
  • 打赏
  • 举报
回复
还有条件二的写法为什么不能这么写,非得自己关联自己一次意义何在?虽然按照下面这么写的结果还不一样了。。。可能确实没懂。 and not exists (select 1 from fwa_rule_base frb where frb.rule_id = frrr1.rule_id and frb.rule_granularity <> '2'))
wjsq0705 2016-11-16
  • 打赏
  • 举报
回复
引用 2 楼 sych888 的回复:
查询出的结果满足 条件一:在fwa_rule_base 表中存在ID相同并且有rule_granularity = '2'的记录 条件二:可以分两步理解 第一步:select 1 from fwa_rule_run_result frrr2 where 1 = 1 and exists (select 1 from fwa_rule_base frb where frb.rule_id = frrr2.rule_id and frb.rule_granularity <> '2') 查询出fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录 第二步:排除fwa_rule_run_result 存在符合条件的记录
多谢回答, 但是条件二排除(fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录), 剩下的不就是rule_granularity= '2'的吗,那不就是条件一了吗? 那为什么整条语句两个条件都要加?有本质区别吗?
引用 4 楼 sych888 的回复:
[quote=引用 3 楼 wjsq0705 的回复:] [quote=引用 2 楼 sych888 的回复:] 查询出的结果满足 条件一:在fwa_rule_base 表中存在ID相同并且有rule_granularity = '2'的记录 条件二:可以分两步理解 第一步:select 1 from fwa_rule_run_result frrr2 where 1 = 1 and exists (select 1 from fwa_rule_base frb where frb.rule_id = frrr2.rule_id and frb.rule_granularity <> '2') 查询出fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录 第二步:排除fwa_rule_run_result 存在符合条件的记录
多谢回答, 但是条件二排除(fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录), 剩下的不就是rule_granularity= '2'的吗,那不就是条件一了吗? 那为什么整条语句两个条件都要加?有本质区别吗?[/quote] 去掉条件二的结果和加上条件二的结果是不是一样?[/quote] 不一样哦,所以很疑惑
sych888 2016-11-16
  • 打赏
  • 举报
回复
引用 3 楼 wjsq0705 的回复:
[quote=引用 2 楼 sych888 的回复:] 查询出的结果满足 条件一:在fwa_rule_base 表中存在ID相同并且有rule_granularity = '2'的记录 条件二:可以分两步理解 第一步:select 1 from fwa_rule_run_result frrr2 where 1 = 1 and exists (select 1 from fwa_rule_base frb where frb.rule_id = frrr2.rule_id and frb.rule_granularity <> '2') 查询出fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录 第二步:排除fwa_rule_run_result 存在符合条件的记录
多谢回答, 但是条件二排除(fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录), 剩下的不就是rule_granularity= '2'的吗,那不就是条件一了吗? 那为什么整条语句两个条件都要加?有本质区别吗?[/quote] 去掉条件二的结果和加上条件二的结果是不是一样?
wjsq0705 2016-11-16
  • 打赏
  • 举报
回复
引用 2 楼 sych888 的回复:
查询出的结果满足 条件一:在fwa_rule_base 表中存在ID相同并且有rule_granularity = '2'的记录 条件二:可以分两步理解 第一步:select 1 from fwa_rule_run_result frrr2 where 1 = 1 and exists (select 1 from fwa_rule_base frb where frb.rule_id = frrr2.rule_id and frb.rule_granularity <> '2') 查询出fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录 第二步:排除fwa_rule_run_result 存在符合条件的记录
多谢回答, 但是条件二排除(fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录), 剩下的不就是rule_granularity= '2'的吗,那不就是条件一了吗? 那为什么整条语句两个条件都要加?有本质区别吗?
sych888 2016-11-16
  • 打赏
  • 举报
回复
查询出的结果满足 条件一:在fwa_rule_base 表中存在ID相同并且有rule_granularity = '2'的记录 条件二:可以分两步理解 第一步:select 1 from fwa_rule_run_result frrr2 where 1 = 1 and exists (select 1 from fwa_rule_base frb where frb.rule_id = frrr2.rule_id and frb.rule_granularity <> '2') 查询出fwa_rule_run_result 表中存在ID相同并且有rule_granularity<> '2'的记录 第二步:排除fwa_rule_run_result 存在符合条件的记录
wjsq0705 2016-11-16
  • 打赏
  • 举报
回复
条件二应该是,我要的答案不能在2以外的答案中。

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧