Como procuro uma mesa “Bag Property” em SQL?
-
19-08-2019 - |
Pergunta
Eu tenho uma tabela básica "saco de propriedade" que armazena atributos sobre a minha principal mesa "Cartão". Então, quando eu quero começar a fazer alguma pesquisa avançada para cartões, eu posso fazer algo como isto:
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'))
O que eu preciso fazer é extrair essa idéia em algum tipo de procedimento armazenado, de modo que, idealmente, eu posso passar em uma lista de propriedades combinações / valor e obter os resultados da pesquisa.
Inicialmente, esta vai ser uma "rigorosa" procurar o que significa que os resultados devem corresponder a todos os elementos da consulta, mas eu também gostaria de ter um "perder" consulta para que ele iria coincidir com qualquer um dos resultados do consulta.
Não consigo bastante parecem envolver minha cabeça em torno deste. Minha versão anterior desta era fazer gerar alguma consulta maciça SQL para executar com muita E / OU cláusulas nele, mas eu estou esperando para fazer algo um pouco mais elegante neste momento. Como eu vou fazer isso?
Solução
parece-me que você tem uma href="http://en.wikipedia.org/wiki/Entity-Attribute-Value_model" rel="nofollow noreferrer"> EAV modelo
http://weblogs.sqlteam.com/mladenp /archive/2006/10/14/14032.aspx torna a pesquisa e outras coisas muito mais fácil com construído em capacidades xml consulta. Se você não pode mudar o seu modelo, em seguida, olhar para este: