2017-05-09 61 views
0

我有一个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

值是否有人有一个想法?

+0

当你说映射可以改变你的意思?规则/代码的哪一部分是可更改的? – APC

回答

0

基本上要执行此任务,您需要一些可以为您即时评估表达式的内容。我已经解决了这样的问题,在过去的唯一途径是:

  1. 容易实现,但不够灵活:嵌入视图表达,然后从视图查询;将视图更改为映射表达式更改。记住一个视图只是一个存储的SQL语句,一个SQL语句可以包含和评估复杂的表达式。

  2. 难以实现,但更灵活:为表达式在某处存储表达式的词法结构;然后读入“表达式”并使用它动态生成SQL;然后运行动态生成的SQL。

玩得开心!

0

如果你想要一个表的解决方案,那么我认为是这样的:

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  | 

PARENT OPERATOR IDCHILD OPERATOR ID是额外的,如果你需要嵌套与或运营商(... AND (... OR ... AND (... OR ...)))

相关问题