Как мне выполнить поиск по таблице “Пакет свойств” в SQL?
-
19-08-2019 - |
Вопрос
У меня есть базовая таблица "пакет свойств", в которой хранятся атрибуты моей основной таблицы "Card". Поэтому, когда я хочу начать расширенный поиск карточек, я могу сделать что-то вроде этого:
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-запрос для выполнения с большим количеством предложений AND / OR в нем, но на этот раз я надеюсь сделать что-то более элегантное.Как мне это сделать?
Решение
мне кажется, что у вас есть Подслушивающий модель здесь.если вы используете sql server 2005 и выше, я бы посоветовал вам использовать для этого XML datatype:
http://weblogs.sqlteam.com/mladenp/archive/2006/10/14/14032.aspx
значительно упрощает поиск и прочее благодаря встроенным возможностям xml-запросов.
если вы не можете изменить свою модель, тогда посмотрите на это: