2011-07-23 15 views
0

ブール論理

id name source 
----------------- 
1 'n' 'a' 
1 'n' 'b' 
1 'n' 'c' 
1 'n' 'd'  
2 'n' 'a' 
2 'n' 'c' 

がどのように私は(ソース== ||ソース== F)& &(ソースが含まれているすべてのIDを選択することができます== c || source == g)?

このMySQL用です...

+0

あなたは何を試してみましたか?それは助けるためにここにあります、そうでなければ、あなたはrent-a-coder.comを望みます。 –

答えて

1
select unique id from table as t1 
where (t1.source = 'a' or t1.source='f') 
    and exists 
    (select * from table as t2 
    where t2.id = t1.id and (t2.source = 'c' or t2.source='g') 
    ) 
+0

私の解決策はよりエレガントだと思う、それは参加するだけで 'いいえ'存在しない:Pしかしコメントに感謝する。 – TMS

+0

ちょっとリラックスして、私はあなたの新しい答えをdownvotedしました:) –

+0

:-)).... :)しかし、とにかく、私は真剣です - あなたの解決策は二次的ではありませんか?つまり、多数の行では、このソリューションを結合と比較するのがどれほど遅いのかが不思議です。 – TMS

0

編集:それは今固定しています)

select id 
from 
    (select id 
    from table 
    where source = 'a' or source = 'f' 
    group by id) as t1 
join 
    (select id 
    from table 
    where source = 'c' or source = 'g' 
    group by id) as t2 
using (id) 
+0

申し訳ありませんが、IDはIDではありませんが、繰り返すことができます!それは私を混乱させた。 – TMS

+0

解決策は今すぐ動作するように変更されています。 – TMS