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

时间:2019-04-29 14:24:26

标签: oracle hybris flexible-search

假设我有两个桌子

表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

注意: Table_A_PK列是集合类型,这就是为什么它具有许多值的原因。

如果列 PK 的值在表B的中退出,我想选择表A size 列的值列 Table_A_PK

为此,我尝试了此操作,但是它不起作用并引发了错误

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

2 个答案:

答案 0 :(得分:1)

首先,不建议使用collectiontype。如果您选择使用它们,则更喜欢关系。它们更容易使用。

我曾经与LIKE运算符认识到这一点:

... WHERE Table_A_PK LIKE '%MYPK%'

但这不是最佳实践。

您也许可以使用Concat-Funktion将%符号与原始表中的PK连接起来进行联接。但是我还没有尝试过。

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

答案 1 :(得分:0)

我建议使用Relation代替CollectionType。如果您无法修改itemType,则可以使用 LIKE 运算符

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