1

假设我有两张桌子,

表 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 列是集合类型,这就是它有很多值的原因。

如果在表 B 的Table_A_PK中存在列PK值,我想选择表 A的大小列的值

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

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
4

2 回答 2

1

首先,不推荐使用集合类型。如果您选择使用它们,则更喜欢关系。他们更容易使用。

我曾经用 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}, '%') }
于 2019-04-29T14:35:42.773 回答
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} , '%' ) )
}
于 2019-05-13T14:00:21.057 回答