假设我有两个桌子
表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
答案 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} , '%' ) )
}