将隐式联接转换为显式联接

  • 本文关键字:转换 sql join implicit
  • 更新时间 :
  • 英文 :


>我在下面有一个查询,似乎一次隐式连接 3 个表,我正在尝试重写它以使用显式连接,但我无法理解它,似乎一个连接的连接列依赖于尚未完成的连接。

这是只有隐式联接才能容纳的方案吗?

我遇到的问题是这种和平:

AND((t.object_type = 'SOME_VALUE' and i.pro_prod_id=400 and i.gbcert_id || '-Packing' = ta.gbcert_id)
OR (t.object_type in ('V1','V2','V3') and i.gbcert_unique_id = ta.gbcert_id)) 

您可以看到,我们正在根据是t.object_type = 'SOME_VALUE'还是t.object_type in ('V1','V2','V3')来决定要加入的列

但是我还不会有这个价值,因为还没有加入t,对我来说,这似乎是鸡问题之前的鸡蛋。

这是查询的更完整版本:

FROM TRANSACTION t, USG_Award ta,
inbox i,
stores s,
clients cl,
client_types ct
WHERE ct.client_type = cl.client_type
AND ct.usg_aggregation_client IS NULL
AND i.orig_store_code = s.sto_store_code
AND i.orig_store_code   = cl.store_code
and ((t.object_type = 'SOME_VALUE' and i.pro_prod_id=400 and i.gbcert_id || '-Pack' = ta.gbcert_id)
OR (t.object_type in ('V1','V1','V1') and i.gbcert_unique_id = ta.gbcert_id))
AND ta.fk_usg_tx = t.pk_usg_tx

此查询以当前形式工作,它是我没有编写的遗留代码。代码已清理。

您可以将

此类条件移动到ON子句中:

FROM TRANSACTION t JOIN
     USG_Award ta
     ON ta.fk_usg_tx = t.pk_usg_tx JOIN
     inbox i 
     ON ((t.object_type = 'SOME_VALUE' and i.pro_prod_id = 400 and i.gbcert_id || '-Pack' = ta.gbcert_id) OR
         (t.object_type in ('V1', 'V1', 'V1') and i.gbcert_unique_id = ta.gbcert_id)
        )JOIN
     stores s
     ON i.orig_store_code = s.sto_store_code JOIN
     clients cl 
     ON i.orig_store_code = cl.store_codeJOIN
     client_types ct
     ON ct.client_type = cl.client_type
WHERE ct.usg_aggregation_client IS NULL

相关内容

  • 没有找到相关文章

最新更新