gpt4 book ai didi

sql - oracle查询结果不一致

转载 作者:行者123 更新时间:2023-12-04 21:49:53 26 4
gpt4 key购买 nike

我有一个非常奇怪的问题,我有一个复杂的 View ,当我查询特定列时返回不正确的数据。
这是一个例子:

select empname
, has_garnishment
from timecard_v2
where empname = 'Testerson, Testy';

这将返回单个结果 'Testerson, Testy', 'N'

但是,如果我使用查询:
select empname
, has_garnishment
from timecard_v2
where empname = 'Testerson, Testy'
and has_garnishment = 'Y';

这将返回单个结果 'Testerson, Testy', 'Y'

第二个查询应该返回第一个查询的一个子集,但它返回一个不同的答案。

当我使用查询时:
select empname
, has_garnishment
from timecard_v2
where empname = 'Testerson, Testy'
and has_garnishment = 'N';

我没有结果

我已经剖析了 View 并确定 View 定义的这一部分是出现问题的地方,即使我采用 sql 定义并将其作为直接查询运行(注意,我删除了除部分之外的所有 select 子句为了清楚起见,在完整查询中需要所有连接的表):

SELECT
e.fullname empname ,
NVL2(ded.has_garn, 'Y', 'N') has_garnishment
FROM timecard tc ,
orderdetail od ,
orderassign oa ,
employee e ,
employee3 e3 ,
customer10 c10 ,
order_misc om,
(SELECT COUNT(*) has_garn,
v_ssn
FROM deductions
WHERE yymmdd_stop = 0
OR (LENGTH(yymmdd_stop) = 7
AND to_date(SUBSTR(yymmdd_stop, 2), 'YYMMDD') > sysdate)
GROUP BY v_ssn
) ded
WHERE oa.lrn(+) = tc.lrn_order
AND om.lrn(+) = od.lrn
AND od.orderno = oa.orderno
AND e.ssn = tc.ssn
AND c10.custno = tc.custno
AND e.lrn = e3.lrn
AND e.ssn = ded.v_ssn(+)

关于“ded”子查询的定义需要注意的一件事。 v_ssn 字段是扣除表上的虚拟字段。

我不是一名 DBA,我是一名软件开发人员,但我们最近失去了我们的 DBA,而新的 DBA 仍在跟上,所以我试图调试这个问题。话虽如此,请比对其他 Oracle 专家更彻底地解释一些事情。

谢谢

最佳答案

原来问题是一个冲突的索引。构建 v_ssn 虚拟列的列上有一个旧索引。我删除了该索引,查询开始按预期运行。我仍然担心该索引如何影响查询,但至少我的直接问题得到了解决。

谢谢你的帮助!

关于sql - oracle查询结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2685017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com