我有两张桌子(ProdOrders和PreCalcTime) 现在我想检查所有ProdOrders是否都有关联的PreCalcTime 每个ProdOrder都有一个绘图编号,每个PreCalcTime都基于此图纸编号 所以我做了以下查询:
select Distinct PO.TEKNR from ProdOrders PO
left join PreCalcTime PCT on PO.drawingnr = PCT.Drawingnr
where V.Time is NULL
此查询效果非常好,但需要很长时间才能生成大约15000个生产订单(大约有550个生产订单)
当然我可以尝试使用一些过滤进行优化,但是还有其他选项,例如“不在选择中”或其他加速此查询的技术
期待您的想法
答案 0 :(得分:1)
我认为V.Time
是一个错误,您只想找到ProdOrders
中没有Drawingnr
的{{1}}。使用PreCalcTime
这是许多数据库系统中最有效的方式(Postgres,Oracle,SQL Server)。
NOT EXISTS
由于JOIN不存在,因此在此解决方案中可能不需要。
答案 1 :(得分:0)
我现在发现了另一种可能性。 如果我只使用ProdOrder表中的不同绘图编号,我会节省大量的查找。基于此,我在from语句中创建了一个子查询。 这样它运行得非常快
select DPO.DrawNr from
(select distinct PO.drawingnr DrawNr from ProdOrders PO) DPO
left join PreCalcTime PCT on DPO.DrawNr = PCT.drawingnr
where PCT.Time is NULL
结果是一样的,但现在最大的问题是这是一个正确的方法