SQL для получения совпадений из таблицы данных и таблицы шаблонов - PullRequest
1 голос
/ 09 марта 2011

Имеется таблица данных с id столбцов, цветом, размером и вторая таблица с правилами / шаблонами, например, rule_id, color_condition и size_condition.

Таким образом, основным правилом будет rule_id = 1, Color = blue, size= Любой или rule_id = 2, Цвет = синий, размер = 15

Как создать запрос SQL, который приводит к совпадениям в третьей таблице

Например, для записи в идентификаторе таблицы данных= 1, цвет = синий, размер = 10 будут применяться оба правила, и поэтому таблица соответствий будет содержать две записи

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

Как циклически проходить по шаблонам и как построить сопоставление, чтобы оно могло иметь дело сПодстановочные знаки или пропустить условия, если они пусты.

Пожалуйста, укажите направления или ключевые слова, которые я готов прочитать.

1 Ответ

1 голос
/ 09 марта 2011

Допустим, у вас есть таблица правил:

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

А, входной стол

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

Поставьте нулевое значение вместо значения Any, чтобы сохранить строгую типизацию

Решение:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...