2011-09-11 14 views
0

私は2つのテーブルがあるとします。「属性」の動的数を持つ行と一致する非動的SQLを記述できますか?

Document 
    int DocumentId (PK) 
    char DocumentName 

Attribute 
    int DocumentId (FK) 
    char AttributeName 
    char AttributeValue 

私はAttributeNameAttributeValueペアのセットと一致DocumentName Sを選択することができます非動的select文書き込むことができますか?

+0

入力データと期待される出力の例を提供できますか? – shahkalpesh

答えて

4
-- Use a table of name,value pairs to search for 
DECLARE @wanted TABLE (AttribitedName ..., AttributeValue ...) 

INSERT @wanted VALUES ('Colour', 'Blue') 
INSERT @wanted VALUES ('Status', 'Draft') 

SELECT 
    * 
FROM 
    Document D 
WHERE 
    EXISTS (SELECT * 
     FROM 
      Attribute A 
      JOIN 
      Wanted W ON A.AttributeName = W.AttributeName AND A.AttributeValue = W.AttributeValue 
     WHERE 
      D.DocumentId = A.DocumentId 
     -- do we match all terms that are in Wanted per DocumentID? 
     GROUP BY 
      A.DocumentId 
     HAVING 
      COUNT(*) = (SELECT COUNT(*) FROM Wanted) 
      ) 
+0

すばらしい、速い答えをありがとう!一時テーブルなしでこれを行うことは可能ですか?私はそうではないと思う傾向がある... –

関連する問題