2017-10-21 24 views
0
のようなSQLクエリー

値(1,1)(1,4)、(4,1)(2,2)を持つテーブル(c1、c2)を指定すると、結果はc2 = 1となり、テーブルに1つのエントリしか存在しません。この場合、それは(4,1)だけである。なぜなら、c1 = 1の2つのエントリがあるからである。 乾杯。明示的な

+0

「この場合は(4,1)のみ」 - なぜ(1,1)ではないのですか? –

+0

私の言葉遣いはちょっと分かりにくいかもしれませんが、私は、c1 = 1の2つの項目があるので、それらは含まれていないことを意味しました。 –

+0

質問を編集してください。 –

答えて

0

まあ、いろいろあります。ここでは1です:

select c1, c2 
from my_table t1 
where c2 = 1 
    and 1 = (select count(*) from my_table t2 where t2.c1 = t1.c1) 

いくつかの他の方法:

select t1.c1, t1.c2 
from my_table t1 
join my_table t2 using (c1) 
where t1.c2 = 1 
group by t1.c1, t1.c2 
having count(*) = 1; 
select c1, c2 
from my_table t1 
where c2 = 1 
    and not exists (
     select * 
     from from my_table t2 
     where t2.c1 = t1.c1 
     and t2.c2 <> t1.c2 
); 
select t1.c1, t1.c2 
from my_table t1 
left join my_table t2 
    on t2.c1 = t1.c1 
    and t2.c2 <> t1.c2 
where t1.c2 = 1 
    and t2.c1 is null; 

最後の2つのクエリは、あなたのテーブルに重複がないように必要になります。

+0

2番目の例では、(タグのようにMySQLのリストで)何も返されません。それは は、(C1)C1で T1.C2 = 1 基、COUNT(*)= 1を有するC2 を用いMY_TABLE T2に参加MY_TABLE t1から選択T1.C1 C1と、T1.C2のC2 あるべきで補正します。 –

+0

@CarmineTambasciaありがとうございます - あなたは正しいです。 –