我正在尝试针对以下问题提出一个简单、高效的查询:
假设有几个实体(项目)都有一个唯一的 ID。实体具有一组可变的属性(属性),因此已移至单独的表中:
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 = ...
有没有更好/更简单/更快的方法来做到这一点?