Maximo/Oracle SQL 语句从连接表中返回不需要的数据
Posted
技术标签:
【中文标题】Maximo/Oracle SQL 语句从连接表中返回不需要的数据【英文标题】:Maximo/Oracle SQL statement returning unwanted data from joined tables 【发布时间】:2021-03-16 14:39:19 【问题描述】:很确定这是一个简单的修复,但我迷路了。尝试从存在复选框 = 1 (gditwocertflag) 的联接表中提取数据。我只想查看已检查的特定行。但是我正在从符合特定标准的工作订单中提取每个劳动力行,并检查该块。我试图以相同的结果加入不同的方式,所以我很确定问题不是加入。还尝试了在返回多于 1 行的子查询上出错的嵌套选择。这就是我现在所处的位置。是我这样称呼的吗?
select w.wonum, l.laborcode as certifier
from maximo.workorder W, maximo.labtrans L
where w.wonum = l.refwo
and w.status = 'CLOSE'
and w.gditperformingrcc like ('MDKM%')
and w.gditusertype = 'PMEL'
and w.wonum not like ('QA%')
and l.gditwocertflag = '1'
and parent is null
and (w.actfinish >= trunc(add_months(sysdate, -12), 'MM')
and w.actfinish < trunc(add_months(sysdate, -0), 'MM'))
;
【问题讨论】:
样本数据和期望的结果真的很有帮助。 您是说您正在使用此查询获取l.gditwocertflag = '1'
不正确的行?将此添加到您的选择子句中:select w.wonum, l.laborcode as certifier, l.gditwocertflag
。你真的得到标志不是 1 的行吗?
谢谢。我添加了 certflag 并注意到它们确实都是 1,这没有任何意义。我们的数据库与其他 2 个位置相关联,并且多个条目巧合的是我们有一个匹配的工作订单号(我被告知永远不会发生)。我过滤了其他 2 个位置并解决了问题。我从没想过会发生这种情况。
【参考方案1】:
感谢您的帮助。问题解决了。我们与其他两个位置共享一个数据库,我没有专门将它们过滤掉。我以为我拥有的过滤器可以解决问题。然而,它没有。巧合的是,他们的一些工单号与我们的一些相匹配,这是不应该发生的。这就是为什么我似乎返回了不正确的数据。在过去的两天里,我一直在为此挠头......
【讨论】:
【参考方案2】:如果 GDIWOCERTFLAG 是 Maximo 中的 YORN 字段,您应该使用整数值进行比较:
select w.wonum, l.laborcode as certifier
from maximo.workorder W
join maximo.labtrans L
on w.wonum = l.refwo
and l.gditwocertflag = 1
where w.status = 'CLOSE'
and w.gditperformingrcc like ('MDKM%')
and w.gditusertype = 'PMEL'
and w.wonum not like ('QA%')
and parent is null
and (w.actfinish >= trunc(add_months(sysdate, -12), 'MM')
and w.actfinish < trunc(add_months(sysdate, -0), 'MM'))
;
【讨论】:
仍然有同样的问题。人工记录(labtrans 表)允许多个用户在工单(wonum)上输入人工。但是,只有 1 人可以证明该作品。一旦检查了 certflag,其他人就无法检查它。因此,可能有多个劳动力行,但每个元只有 1 个已检查该块。希望这是有道理的。现在我正在为每个劳动力条目返回重复的 wonum。 知道了,所以您需要将站点 ID 添加到加入条件中? 我做到了。我在最初的声明中有它,但在发布之前我把它和其他一些东西一起拿出来,只是为了缩短一些。我没有做的是添加 w.siteid 和 l.siteid。我只过滤了 w。所以它正在从所有站点提取 L 数据。我们最近进行了整合,现在多个站点共享一个数据库。这以前从来不是问题。只是不习惯多个站点共享一个数据库……哈哈。以上是关于Maximo/Oracle SQL 语句从连接表中返回不需要的数据的主要内容,如果未能解决你的问题,请参考以下文章
编写 SQL 语句通过 join id 查找行,并将连接行中的值插入到父表中
SQL 从带有子查询的多个表中选择数据(包括来自内部连接的数据)错误:1242