【问题标题】:Oracle SQL - Outer join based on concatOracle SQL - 基于 concat 的外连接
【发布时间】:2021-07-24 13:55:44
【问题描述】:

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

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 外部连接 (+) 符号的放置位置

【问题讨论】:

  • 样本数据、期望的结果以及对逻辑的清晰解释都会有所帮助。

标签: sql oracle join outer-join


【解决方案1】:

首先,使用显式连接语法 - 旧的 (+) 难以阅读且容易出错。其次,使用|| 运算符而不是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

【讨论】:

    【解决方案2】:

    要在 Oracle 中进行外连接,请使用适当的 JOIN 类型——就像在所有其他数据库中一样。我认为你想要的逻辑是:

    select FutureInventory.Item,
           To_Number(Concat(Location, Channel_Id)) as Location,
    from xx_Item_Loc_Info_V ItemLoc LEFT JOIN
         V_CUST_FUTURE_INV_POSITION FutureInventory,
         on FutureInventory.Item = ItemLoc.Item AND
            To_Number(Concat(Location, Channel_Id)) = ItemLoc.Loc;
    

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 2018-05-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多