Sql 在Oracle中多次连接同一个表
您好,我正在调整一个遗留代码。在一个大查询中,我们有以下两个表Sql 在Oracle中多次连接同一个表,sql,database,oracle,plsql,oracle11g,Sql,Database,Oracle,Plsql,Oracle11g,您好,我正在调整一个遗留代码。在一个大查询中,我们有以下两个表 fnd_currencies, and pa_commitment_txns 我在from子句中看到了 fnd_currencies fca, fnd_currencies fcr, fnd_currencies fcp, pa_commitment_txns pct 第一个表已经使用了三次,并且它与相同的列和相同的表进行了外部连接 AND fca.currency_code(+) = pct.acct
fnd_currencies, and pa_commitment_txns
我在from子句中看到了
fnd_currencies fca,
fnd_currencies fcr,
fnd_currencies fcp,
pa_commitment_txns pct
第一个表已经使用了三次,并且它与相同的列
和相同的表进行了外部连接
AND fca.currency_code(+) = pct.acct_currency_code
AND fcr.currency_code( +) = pct.receipt_currency_code
AND fcp.currency_code(+) = pct.project_currency_code
以上三行只能使用
fnd\u货币
表处理一次。有更聪明的方法吗?通过使用子查询factoring子句,您可以确保只查询一次fnd\u货币。这看起来是这样的(并通过使用ANSI 92语法保持@gordonlinoff愉快):
这是否真的能给您带来更好的执行时间取决于您的数据细节,您还没有向我们提供这些细节。您可以使用子查询保理子句确保只查询一次fnd\u货币。这看起来是这样的(并通过使用ANSI 92语法保持@gordonlinoff愉快):
这是否真的能给您带来更好的执行时间取决于您的数据细节,您没有向我们提供这些细节。不,至少不容易。但是,您的代码应该使用左连接
而不是过时的外部连接语法。当然..谢谢Gordon。可能是使用或,但取决于完整查询。@CetinBasoz查询非常复杂。所以我只放了这部分。看看我放的零件有什么解决办法吗?试试或。您有原始查询,删除额外别名可能会有副作用。不,至少不容易。但是,您的代码应该使用左连接
而不是过时的外部连接语法。当然..谢谢Gordon。可能是使用或,但取决于完整查询。@CetinBasoz查询非常复杂。所以我只放了这部分。看看我放的零件有什么解决办法吗?试试或。你有原始的查询,删除额外的别名可能会有副作用。答案很好。我有一些想法如何重写查询。非常感谢APC。回答得很好。我有一些想法如何重写查询。非常感谢APC。
with ccy as ( select *
from fnd_currencies )
select fca.descr as acct_currency
,fcr.descr as receipt_currency
,fcp.descr as project_currency
,pct.*
from pa_commitment_txns pct
left outer join ccy fca on fca.currency_code = pct.acct_currency_code
left outer join ccy fcr on fcr.currency_code = pct.receipt_currency_code
left outer join ccy fcp on fcp.currency_code = pct.project_currency_code