我想将主键列表存储到同一张表中的其他记录。然后我希望能够执行类似于以下内容的选择:
SELECT * FROM mytable WHERE myarraycol CONTAINS '123'
我已经看到 Oracle 有一个数组数据类型。但是,看起来 EXISTS 函数仅验证元素是否存在于指定索引处。有没有办法验证给定变量是否在单个 SQL 查询中的数组数据类型列中?
作为使用数组数据类型的替代方法,我尝试将 PK 存储为逗号分隔的字符串,例如“123,324,543,23432”。然后我的查询看起来像:
SELECT * FROM mytable WHERE mystringcol LIKE '%123%'
如果我想要其中包含 PK '123' 的所有记录。这个问题(以及许多其他问题)是,如果另一个记录的值是“432,9912399,432”,则该记录将显示,因为“9912399”中的“123”。
我可以使用“LIKE”和字符串解决此问题的一种方法是让我的 where 子句为:
WHERE mystringcol LIKE '%,123,% OR mystringcol LIKE '%123, OR mystringcol LIKE '%,123
测试“123”是否在整个字符串的中间、开头或结尾,但这开始变得丑陋,我宁愿不这样做。
以前有没有人做过这样的事情并且可以指出我正确的方向?