如何在表连接中组合多个条件?

时间:2016-02-01 21:47:16

标签: sql sql-server

简单地说,我有两个规则表,一个列出所有规则,另一个列出规则的详细信息:

Rule_ID Rule_Name 
1      "Rule Name 1"
2      "Rule Name 2"

Target_Rule_ID Condition
1              >10
1              <20
1              !=15
1              !=18
2              >30

含义:对于Rule_ID编号1,该值大于10,小于20,而不是eqaul到15也不是18。

我需要将此规则应用于另一个数据表,例如:

ID    Value 
1     11
2     60
3     15

并将结果如下:

ID   Value   Rule_ID
1    11      1
2    60      2
3    15      null

我能想到的当前方法是使用像python这样的高级语言。

  1. 全面了解规则
  2. 制作where子句
  3. 逐一加入表格
  4. 但听起来效率低,因为这意味着我需要将规则与数据表连接X次(X =总规则数)。

    我想知道有没有更好的方法直接在sql server中执行此操作?有什么建议吗?

    (同时假设规则不会相互冲突,这会使问题更加困难)......

1 个答案:

答案 0 :(得分:1)

无论你在哪里,都需要一种方法将数值与其规则表达式分开(条件,如&lt; 10等)。您是否考虑过分离表达式和值?

这样的东西
rule_details table:  

t_rule_id rule_type Value
1         >         10
1         <         20

将该集合加入要检查/验证的信息集。有很多案例陈述

case 
    when rule_type = '>' and value > other_value then true
    when rule_type = '>' and value <= other_value then false
    ...
end as rule_satisfied

您可以根据规则详细信息中列出的条件创建一列来验证每个数字。此时,您可以对创建的每个组执行逻辑AND - &gt;如果为TRUE则满足所有规则。