【发布时间】:2017-07-05 10:34:34
【问题描述】:
我想在传递的数组中为每一行查找列值的索引。 查找该值是否存在于数组中是不够的,因为我想将该索引与另一列的值进行比较。
我期待这样的事情。
SELECT * FROM my_table t WHERE :argumentArray.indexOf(t.col1) BETWEEN 0 AND t.col2
如果我将该数组转换为表格或类似的东西,也许这是可能的。
这是我的真实示例的结构: 下面是员工树的层次结构。
1000
/ \
1001 1002
/ \
1003 1004
/
1005
我有存储文档共享信息的表格
document_id | shared_under | level
----------- | ------------ | ---------
123 | 1000 | 2
此记录意味着 ID 为 123 的文档与 ID 为 1000 的员工仅由级别 2 共享。 (ID 为 1000、1001、1002、1003、1004 的员工可以访问该文档,而 1005 不能)
想要的结果:
如果员工 1005 搜索文档,他将他的层次结构作为数组参数传递,即 (1005, 1003, 1001, 1000)
查询将如下所示:
SELECT `document_id` FROM `shared_documents` WHERE (1005, 1003, 1001, 1000).indexOf(shared_under) BETWEEN 0 AND `level`
此查询必须返回无数据,因为 emp.1005 在第 3 级低于 emp.1000,但文档仅共享 2 级深度。
如果emp.1003搜索他通过的共享文档(1003,1001,1000)并且查询必须返回文档123,因为它是与员工1000共享的,并且员工1003在他的2内水平深度。
我已经用正则表达式解决了这个问题,但我想知道Oracle是否支持这种解决方案。
【问题讨论】:
-
请发布您的表结构、一些示例数据、您的确切要求和所需的输出。
-
请提供minimal reproducible example,包括表的 DDL 语句、示例数据的 DML 语句和预期输出(包括对如何达到解决方案的逻辑的描述)。您似乎在寻求解决方案并希望使用数组来解决问题,但数组在 SQL 中并不典型,可能不是您问题的答案...