2011-12-29 64 views
0

我有2個表。表A只有一列稱爲ID,它有一個ID列表1,2 ...... n 表B有3列:ID(表A中的引用ID列);鍵,值 所以B表是這樣的:問題與Oracle選擇查詢

ID KEY VALUE 
1 x true 
1 y false 
1 z true 
2 x false 
2 y false 
2 z false 

.. ..... 表B中 所以從表A中的每個ID已經得到了3項,我需要從獲取的所有ID查詢在表B中有x,y和z都被標記爲false的表A.所以如果x,y,z中的任何一個對於特定的Id是真的,我們不選擇它。 我試過,但這個是錯誤的:

select A.id from A,B where A.id = B.id and B.key in ('x','y','z') and B.value = 'false' 

能否請你幫我用正確的查詢?

回答

1

將近有:

select A.id 
from A,B 
where A.id = B.id and B.key in ('x','y','z') and B.value = 'false' 
group by A.id 
having count(distinct B.key)=3 
+0

非常感謝您的先生。這是超級優雅 – Victor 2011-12-29 17:29:27

0
select id from a where a.id not in (select id from b where value = 'true') 

應該做的伎倆

,它假定沒有爲每個ID的X,Y和Z項。

+0

我認爲這個問題意味着B.key可以有比 'X', 'Y' 或 'z' 的其他值。 – 2011-12-29 17:20:23

+1

可能。我讓他選擇你的答案或我的決定或提供更多細節。 :-) – 2011-12-29 17:22:11