代码之家  ›  专栏  ›  技术社区  ›  Junaid

Oracle:如何检查集合类型列中是否存在值?

  •  0
  • Junaid  · 技术社区  · 5 年前

    假设我有两张桌子,

    表A

    PK       SIZE  
    89733     5 
    83644     3  
    87351     8
    84423     11
    

    表B

     ID      Table_A_PK  
      1     89733,83644,86455   
      2     87351,89542  
      3     84132
      4     84566,84646
    

    注: 列表 属于集合类型,这就是它具有多个值的原因。

    我想选择的值 大小 第列,共列 表A if列 PK 值存在于 表B

    为此,我试过了,但它不起作用,而且犯了一个错误。

    Select {a.SIZE} 
    from {A as a} where {a.PK}  
    in ({{ SELECT {b.Table_A_PK} FROM {B as b}
    

    实际结果: ORA-01722:无效号码

    预期结果

            SIZE  
             5  
             3  
             8
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Johannes von Zmuda    5 年前

    首先,不推荐使用CollectionType。如果你选择使用它们,最好选择关系。他们更容易相处。

    我曾经用类似的接线员意识到这一点:

    ... WHERE Table_A_PK LIKE '%MYPK%'
    

    然而,这不是最佳实践。

    可以使用concat函数将%符号与原始表中的pk连接起来进行联接。但是我没有试过。

    SELECT {a.SIZE} 
    FROM {A AS a JOIN B AS b 
    ON {b.TABLE_A_PK} LIKE Concat('%', {a.pk}, '%') }
    
        2
  •  0
  •   HybrisHelp    5 年前

    我建议用 Relation 而不是 CollectionType . 如果处于无法修改项类型的情况,则可以使用 喜欢 操作人员

    SELECT {a.SIZE}
    FROM
    {
       B AS b JOIN A AS a
       ON {b.TABLE_A_PK} LIKE CONCAT( '%', CONCAT( {a.PK} , '%' ) )
    }