我对这个查询的结果感到困惑:
select count(*) from my_tab mt
where mt.stat = '2473'
and mt.name= 'Tom'
and exists (select * from company_users@colink.world cu,
personnel_records@colink.world pr
where cu.user_id = pr.user_id
and mt.name = pr.name
and mt.stat = cu.stat
)
返回:1
company_users@colink.world中有0条记录,其中stat ='2473',那为什么它对于存在会返回true?
如果我像这样更改查询,则返回0:
select count(*) from my_tab mt
where mt.stat = '2473'
and mt.name= 'Tom'
and exists (select * from company_users@colink.world cu,
personnel_records@colink.world pr
where cu.user_id = pr.user_id
and mt.name = pr.name
and cu.stat = '2473'
)
更新好的,这真的很奇怪。为了看看会发生什么,我从其他数据库(DB链接引用的数据库)执行查询,它给出了不同的(正确的)结果。
select count(*) from my_tab@mylink.world mt
where mt.stat = '2473'
and mt.name= 'Tom'
and exists (select * from company_users cu,
personnel_records pr
where cu.user_id = pr.user_id
and mt.name = pr.name
and mt.stat = cu.stat
)
返回0(按预期方式)。
答案 0 :(得分:1)
你问题中的第二个查询有点不同 - 它根本没有查看cu.stat,因此没有解决cu.stat ='2473'的问题。如果执行
,会得到什么结果select count(*)
from company_users@colink.world cu,
personnel_records@colink.world pr,
my_tab mt
where mt.stat = '2473' and
mt.name = 'Tom' and
pr.name = mt.name and
cu.user_id = pr.user_id and
cu.stat = mt.stat
我认为这相当于你不使用EXISTS的第一个查询,并且应该提供正确的结果。
分享并享受。
答案 1 :(得分:0)
查看第一个查询的解释计划。我怀疑有一个错误,查询计划可能会显示无效的重写是如何完成的。