如何在两个表之间的连接中使用表达式?

时间:2013-12-05 05:40:26

标签: sql oracle-sqldeveloper

我有两张桌子。在第一个表格(transaction)中,有两列名为supplier_codelocal_commodity_code。在第二个表格(local_feed_commodity_map)中,有两列名为local_commodity_codelocal_commodity_desc。在第一个表中,local_commodity_code字段是通过连接第一个表中的supplier_code和第二个表中的local_commodity_code来创建的。 我使用以下代码拆分连接列:

SELECT
SUBSTR(T.LOCAL_COMMODITY_CODE, 1, INSTR(T.LOCAL_COMMODITY_CODE,'~')-1) LOCAL_COM_CODE
FROM OYSTER_WEB3.TRANSACTION T

因此,我在拆分后会有一个名为local_com_code的列。

现在我想使用新生成的列(local_com_code)和第二个表中的local_commodity_code列来连接这两个表。如何仅使用SELECT语句执行此操作,因为我没有创建,插入或更新表的权限。

1 个答案:

答案 0 :(得分:1)

SELECT L.*, T.*
  FROM (SELECT Supplier_Code,
               Local_Commodity_Code,
               SUBSTR(LOCAL_COMMODITY_CODE, 1, INSTR(LOCAL_COMMODITY_CODE,'~')-1)
                      LOCAL_COM_CODE
          FROM OYSTER_WEB3.TRANSACTION
       ) T
  JOIN Local_Feed_Commodity_Map L
    ON L.Local_Commodity_Code = T.Local_Com_Code

Oracle在某些地方厌恶使用SQL标准的“AS”关键字,因此我没有在任何地方使用它来最大限度地提高代码运行的可能性。

然而,正如我在对该问题的评论中所指出的,这是一个令人震惊的架构设计,应该修复。通过要求使用SUBSTR和INSTR来消除在这两个表之间必须工作的所有查询是荒谬的。 Transaction表中的Local_Commodity_Code应与Local_Feed_Commodity_Map表中的Local_Commodity_Code相同,以便可以正确索引主键和外键列(并强制执行参照完整性)。