1

给定一个包含 id、color、size 列的数据表和第二个包含规则/模式的表,如 rule_id、color_condition 和 size_condition。

所以基本规则是 rule_id=1,Color=blue, size=Any 或 rule_id=2,Color=blue, size=15

如何构造一个 SQL 查询,将匹配项生成到第三个表中

例如,对于数据表 id=1、color=blue、size=10 中的条目,两个规则都适用,因此匹配表将包含两个条目

rule_id=1, entry_id=1
rule_id=2, entry_id=1

如何循环遍历模式以及如何构造匹配,以便它可以处理通配符或在它们为空时省略条件。

请提供方向或关键字,我准备阅读。

4

1 回答 1

1

Let's say you have the rule table :

Rule
Id--Color--Size
1 --blue -- null
2 --blue -- 15

And Entry table

Entry
Id--Color--Size
1 --blue -- 10

Put a null value instead of a 'Any' value to keep some strong typing

A solution :

Select r.id as rule_id,
       e.id as entry_id
From Entry e inner join Rule r
          On (e.Color = r.Color or r.Color is null)
          And (e.Size <= r.Size or r.Size is null)

You can create a new table Color for better performance :

Color
Id--Name
1 --Red
2 --Blue

Rule
Id--Id_Color--Size
1 --  2     -- null
2 --  2     -- 15

Entry
Id--Id_Color--Size
1 --   2    -- 10

Select r.id as rule_id,
       e.id as entry_id
From Entry e inner join Rule r
     On  (e.Id_Color = r.Id_Color or r.Color is null)
     And (e.Size <= r.Size or r.Size is null)

Add an index to both Id_Colors

于 2011-03-09T15:46:46.057 回答