2011-12-29 85 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