2011-12-29 3 views
0

私は2つのテーブルを持っています。表AにはIDと呼ばれる1つの列があり、ID1,2、...のリストを持っています。 表Bには3つの列があります。ID(表AのID列を参照)。キー、値 だから、テーブルBは、このように書き:Oracle selectクエリに関する問題

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

.. ..... だから、テーブルAから各IDは、テーブルB で3つのエントリを持っている私はからすべてのIDを取得し、クエリを必要としますテーブルAでx、y、zがすべてテーブルBでfalseとマークされているテーブル。特定のIDに対してx、y、zのいずれかが真であれば、それを選択しません。 私はこれを試してみましたが、これは間違っている:

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

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' 以外の値を持つことができることを意味だと思います。 –

+1

可能です。私は彼にあなたの答えを選ぶことによって決定させるか、または私の詳細を提供します。 :-) –

関連する問題