2013-09-24 51 views
2

我的表看起來像這樣SQL查詢的WHERE子句具有多行條目

DocumentID AttributeID LongValue StringValue BooleanValue 
100     1     null    null     1 
100     2     123     null     null 
100     3     null    test     null 

每個屬性ID是一個類型的,只有該列填充和其他一切都是空。文檔可以有多個屬性。

我的查詢需求,我覺得文件,其中

Attribute ID 1 has value 1 
Attribute ID 2 has value 123 
Attribute ID 3 has value test 

我正在寫一個這樣的查詢

select documentID 
from table 
where (
    (AttributeID=1 AND BooleanValue=1) AND 
    (AttributeID=2 AND LongValue=123) AND 
    (AttributeID=3 AND StringValue="test")) 

上面的查詢,很明顯,是給我雖然文件100滿足我的限制結果爲零。 如何更改我的查詢以獲取文檔ID 100作爲結果?

回答

4
SELECT DocumentID 
FROM tablename 
WHERE (AttributeID = 1 AND booleanValue = 1) OR 
     (AttributeID = 2 AND longValue = 123) OR 
     (AttributeID = 3 AND stringValue = 'test') 
GROUP BY DocumentID 
HAVING COUNT(*) = 3 
+0

感謝但不會返回一個文件,如果它匹配任何一個屬性值?此外,計數可以是動態的,不必是3. – nick01

+0

@ user2812714不行。如果它符合'WHERE'子句中的三個條件,它將只顯示'documentID'。 'HAVING'子句過濾了'documentID',因爲你在'WHERE'子句中指定了三個條件,所以它們等於3。對於*動態*,創建一個過程或從參數設置值的東西。 –

+0

它的工作原理,謝謝! – nick01