在数据库中存储具有多个条件的映射
问题描述:
我有一个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 |
列PARENT OPERATOR ID
和CHILD OPERATOR ID
是额外的,如果你需要嵌套与或运营商(... AND (... OR ... AND (... OR ...)))
当你说映射可以改变你的意思?规则/代码的哪一部分是可更改的? – APC