如何搜索“属性包”表中的SQL?
-
19-08-2019 - |
题
我有一个基本的“属性包”表用于存储属性有关我主表“一卡通”。所以,当我要开始做了卡的一些高级搜索,我可以做这样的事情:
SELECT dbo.Card.Id, dbo.Card.Name
FROM dbo.Card
INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
WHERE dbo.CardProperty.IdPrp = 3 AND dbo.CardProperty.Value = 'Fiend'
INTERSECT
SELECT dbo.Card.Id, dbo.Card.Name
FROM dbo.Card
INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
WHERE (dbo.CardProperty.IdPrp = 10 AND (dbo.CardProperty.Value = 'Wind' OR dbo.CardProperty.Value = 'Fire'))
我需要做的就是这个主意提取到一些类型的存储过程,所以最好我能在属性/值组合的列表通过并获得搜索结果。
最初,这将是一个“严格”的搜索意味着结果必须在查询中的所有元素相匹配,但我也希望有一个“松散”查询,以便它会匹配任何的结果查询。
我不能完全似乎环绕这一个我的头。我以前的这个版本是这样做产生一些大规模的SQL查询了大量和/或它的条款来执行,但我希望做一些事情这个时候多了几分优雅。我该如何去这样做呢?
解决方案
在我看来,你有一个 EAV 模型在这里。 如果你使用SQL Server 2005和了,我会建议你使用这个XML数据类型:
http://weblogs.sqlteam.com/mladenp /archive/2006/10/14/14032.aspx
使搜索和东西与内置的XML查询功能变得更加容易。
如果你不能改变你的模型,然后看看这个:
不隶属于 StackOverflow