2011-07-30 23 views
0

はFLD2 = 20SQL Selectステートメントの建設

これが唯一のFLD1だろう、私はFLD2 = 10を持つすべてのFLD1の値を取得したい場合

|rowid| fld1 | fld2| 
|1 | 1 | 10 | 
|2 | 1 | 20 | 
|3 | 2 | 10 | 
|4 | 3 | 20 | 

でテーブルTを与えられ、

select * from T where fld2 = 10 and rowid in (select rowid from T where fld2 = 20); 

以上QUがある:FLD2は10と20

サブクエリを行くために私の最善の方法である値を持ちますエリー?

+0

何あなたはROWID 1と2を返すようにしたいと言うしようとしていますfld1がfld2の場合は10と20に一致するため、 –

+0

はい。私は本当にfld1 = 1がfld2の "10"と "20"の1つしかないので、fld1の値が1である必要があります。 –

答えて

2

私はあなたがこのクエリが充分ですべての行

select fld1 from table 
where fld2 in (10,20) 
group by fld1 
having count(distinct(fld2)) = 2 

を取得する必要がない場合、私はあなたの質問

select * from table where fld1 in (
select fld1 from table 
where fld2 in (10,20) 
group by fld1 
having count(distinct(fld2)) = 2) 

を理解している願っています。

+0

グループは私が忘れていたものでした。 2番目のクエリは本当に私が望むものです。しかし、これは私のサブクエリより速いですか? –

+0

私のクエリはあなたのものより速くなると思うが、大規模なデータセットでそれをテストしてから両方のクエリの説明を調べなければならない。 –

-1
SELECT * FROM T WHERE fld2 = '10' AND fld='20' 

本当に簡単です。

+0

これはうまくいきません。空のセットを返します。 –

+0

待ち時間 - あなたは何をしたいですか? fld2は決して10と20になることはできません。したがって、fld1が10でfld2が20であることを希望しました。明確にするために – w0bni

+0

が更新されました。 –

4

あなたは自己結合試すことができます。

select * 
from T t1 JOIN T t2 on t1.fld1 = t2.fld1 
where t1.fld2 = 10 
and t2.fld2 = 20 

Iわからないが、ニックのソリューション@対本の相対的なパフォーマンスに

+0

+1は創造的!私は自己結合を使ったことが一度もありません。 –

+0

+1。ニースの解決;) –

関連する問題