1

列ID、色、サイズを含むデータテーブルと、ルール/パターンを含む2番目のテーブル(rule_id、color_condition、size_condition)があるとします。

したがって、基本的なルールは、rule_id = 1、Color = blue、size=Anyまたはrule_id=2、Color = blue、size=15になります。

3番目のテーブルに一致するSQLクエリを作成するにはどうすればよいですか

たとえば、データテーブルid = 1、color = blue、size = 10のエントリの場合、両方のルールが適用されるため、一致テーブルには2つのエントリが含まれます。

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

パターンを循環する方法と、ワイルドカードを処理したり、空の場合は条件を省略したりできるように、マッチングを構築する方法。

道順やキーワードを教えてください、私は読む準備ができています。

4

1 に答える 1

1

ルールテーブルがあるとしましょう:

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

そしてエントリーテーブル

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

強い型付けを維持するために、「任意」の値の代わりにnull値を入れてください

解決策 :

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)

パフォーマンスを向上させるために、新しいテーブルColorを作成できます。

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)

両方のId_Colorsにインデックスを追加します

于 2011-03-09T15:46:46.057 に答える