Я пытаюсь придумать простой, производительный запрос для следующей проблемы:
Допустим, есть несколько сущностей (элементов), каждый из которых имеет уникальный идентификатор. У сущностей переменный набор атрибутов (свойств), поэтому они вынесены в отдельную таблицу:
T_Items_Props
=======================
Item_ID Prop_ID Value
-----------------------
101 1 'abc'
101 2 '123'
102 1 'xyz'
102 2 '123'
102 3 '102'
... ... ...
Теперь я хочу найти элемент, который соответствует некоторым указанным критериям поиска, например:
<<Pseudo-SQL>>
SELECT Item_Id(s)
FROM T_Items_Props
WHERE Prop 1 = 'abc'
AND Prop 2 = '123'
...
AND Prop n = ...
Это было бы довольно легко, если бы у меня была такая таблица, как Items(Id, Prop_1, Prop_2, ..., Prop_n)
. Затем я мог бы сделать простой SELECT
, где критерии поиска можно было бы просто (даже программно) вставить в пункт WHERE
, но в этом случае мне пришлось бы сделать что-то вроде:
SELECT t1.Item_ID
FROM T_Items_Props t1
, T_Items_Props t2
, ...
, T_Items_Props tn -- (depending on how many properties to compare)
AND t1.Item_ID = t2.Item_ID
AND t1.Prop_ID = 1 AND t1.Value = 'abc'
AND t2.Prop_ID = 2 AND t2.Value = '123'
...
AND tn.Prop_ID = n AND tn.Value = ...
Есть ли лучший/более простой/быстрый способ сделать это?