【发布时间】:2010-02-11 17:06:04
【问题描述】:
我正在尝试为依赖于安全性的报告解决方案实施前端。用户有 12 级嵌套条件可供选择,每个条件的值都会影响下面的所有值。
所以页面上的标准选择(每个都是一个下拉菜单)看起来像这样:
标准 1
标准 2
...
标准 12
有一个安全表,其中包含每个用户可用的值,其结构如下:
EmployeeID | Criteria_1_valid_Value | C2_valid_Value | ... | C12_valid_Valuex0001 | c1 | c2 | ... | c12
并且每个员工在此表中将有一个或(许多)多行。把它想象成一棵扁平的树,以 Criteria1 作为根节点。
根据键,更改标准 1 将影响在标准 2 到 12 中可见的值。同样,更改标准 2 中的值会影响在标准 3 到标准 12 中可用的值。在每个级别,有是一个选择“所有值”的选项,它在内部由一个空格表示,用于查找。所以我需要在查找表/视图中考虑到可能存在一个或多个级别的空间。
我正在努力寻找一种方法来使用 sql 为每个 Criteria 字段构建查找视图/表,而无需求助于硬编码。
例如,要为条件 2 构建查找,sql 可能如下所示:
select EmployeeID, Criteria1, Criteria2
from Security
Union
select EmployeeID, ' ', Criteria2
from Security
Union
select EmployeeID, Criteria1, ' '
from Security
UNION
select EmployeeID, ' ', ' '
from Security
等等。不幸的是,当然,有 12 个级别,最后一个是 2^12 个联合,坦率地说,这很臭。
我已经尝试为每个级别批量构建一个表,在每个级别之后提交,然后使用前一个表连接到安全表来构建下一个表,每个表中都有一个 UNION,但我似乎无法获得连接以与空间正常工作。
我不知道我是想多了还是完全错过了一些东西,但我觉得必须有一个更简单的解决方案。
编辑:这是关于 Oracle 的,我正在使用 ERP 产品作为底层技术。
EDIT2:感谢大家的投入。我使用下面@Alex Poole 的示例过程中的连接正确地进行了连接:
and (v_Criteria_1 = ' ' or Criteria_1_valid_Value = v_Criteria_1)
我错过了v_Criteria_1 = ' ' or。
所以我现在已经正确(足够)加载了表格。这变成了调整/优化练习。我要看看@Alex Poole 的过程和@JD_55 的算法方法,我认为这可能很快。
【问题讨论】:
-
您能否发布一个简短的示例,显示 Criteria1 的值选择如何影响 Criteria2 和 Criteria3 的可用值范围?这是我希望 SO 提供白板工具的情况之一。
-
我同意。基本上它是一棵扁平树,因此 c1 会影响 c2 中出现的值,而在 c2 中选择单个值会影响 c3 的可用值,等等...