首页 > 解决方案 > Oracle SQL - 基于 concat 的外连接

问题描述

我需要交叉连接两个表,但连接条件是:

Select FutureInventory.Item,
       To_Number(Concat(Location, Channel_Id)) Location,
  From V_CUST_FUTURE_INV_POSITION FutureInventory,
       xx_Item_Loc_Info_V         ItemLoc
 Where FutureInventory.Item(+) = ItemLoc.Item
   And To_Number(Concat(Location, Channel_Id))(+) = ItemLoc.Loc;

我想将列 To_Number(Concat(Location, Channel_Id)) 与 ItemLoc.Loc 外连接到放置(+)符号的位置

标签: sqloraclejoinouter-join

解决方案


首先,使用显式连接语法——旧(+)的很难阅读并且容易出错。其次,使用||运算符而不是CONCAT函数——同样,更易于阅读。所以我们最终得到

Select FutureInventory.Item,
       To_Number(Location || Channel_Id) Location,
  From xx_Item_Loc_Info_V ItemLoc
  LEFT OUTER JOIN V_CUST_FUTURE_INV_POSITION FutureInventory,
    ON FutureInventory.Item = ItemLoc.Item And
       To_Number(Location || Channel_Id) = ItemLoc.Loc

推荐阅读