Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在数据库中存储具有多个条件的映射_Sql_Database_Oracle_Oracle11g_Relational Database - Fatal编程技术网

Sql 在数据库中存储具有多个条件的映射

Sql 在数据库中存储具有多个条件的映射,sql,database,oracle,oracle11g,relational-database,Sql,Database,Oracle,Oracle11g,Relational Database,我有一个SELECT语句,我必须映射键。我需要将此映射存储到数据库中,因为此映射可能会更改。由于映射条件仅基于一个键,因此相对简单 SELECT table.flield1 AS COL1 , (SELECT value from TransformationTable WHERE key = table.field2) AS COL2 [...] 现在我有一个例子,映射条件更复杂。在SQL中,它类似于: CASE WHEN table.field1 = 'ORG' AND table

我有一个SELECT语句,我必须映射键。我需要将此映射存储到数据库中,因为此映射可能会更改。由于映射条件仅基于一个键,因此相对简单

SELECT 
  table.flield1 AS COL1
, (SELECT value from TransformationTable WHERE key = table.field2) AS COL2
[...]
现在我有一个例子,映射条件更复杂。在SQL中,它类似于:

CASE
 WHEN table.field1 = 'ORG' AND table.field2 IN (1,2,3) THEN 01
 WHEN table.field1 = 'ORG' AND table.field2 NOT IN (5,76,88) OR IN (9) THEN 02
 WHEN table.field1 != 'ORG' AND table.field2 IN (1,2,3) THEN 03
END
如何在数据库中存储这样的条件,以便像示例1中那样选择值


有人有想法吗?

基本上,要执行这项任务,您需要能够动态计算表达式的东西。我过去解决此类问题的唯一方法是:

  • 易于实现但不太灵活:将表达式嵌入到视图中,然后从视图中查询;当映射表达式更改时更改视图。请记住,视图只是一个存储的SQL语句,SQL语句可以包含和计算复杂的表达式

  • 更难实现但更灵活:将表达式的词汇结构存储在表中的某个位置;然后读入该“表达式”,并使用它动态生成SQL;然后运行动态生成的SQL


  • 玩得开心

    如果您想要一个表格解决方案,那么我会想到这样的方法:

    PARENT      | CHILD         | LOGICAL   | COLUMN        | OPERATOR  | VALUES  | OUTPUT    |
    OPERATOR ID | OPERATOR ID   | OPERATOR  | (expression)  | OPERATOR  | VALUES  | ATTRIBUTE |
    --------------------------- ---------------------------------------------------------------
    10001       | 10003         | AND       | field1        | IN        | 1,2,3   | 01        |
    10001       | 10004         | AND       | field2        | NOT IN    | 5,76,88 | 01        |
    10002       | 10005         |           | field1        | IN        | ...     | 02        |
    10002       | 10006         |           | field2        | NOT IN    | ...     | 02        |
    

    父运算符ID
    子运算符ID
    是附加的,以防您需要嵌套的and-OR运算符
    (…和(…或…)和(…或…)

    当您说映射可以更改时,您的意思是什么?规则/代码的哪一部分是可更改的?