2

次のテーブルがあるとします。

sett_tb_plant_trans

(pk)uidplanttrans  field1  stoptime
---------------------------------   
x                  1       1/1/2000
y                  1       null 
z                  2       1/1/2000
k                  2       1/1/2000
v                  3       null
j                  4       null

すべての行が入力されており、field1 に同じ「キー」があるため、選択したいとz思います。kstoptime

私はこのクエリを実行しました:

 select 
   field1 from sett_tb_plant_trans 
 where uidplanttrans not in 
   (select uidplanttrans from sett_tb_plant_trans where stoptime is null)

ただし、 nullfield1 の行がいくつかあるものを返しますstoptime

なぜ?

4

2 に答える 2

2

次のようにクエリを単純化できるはずです。

select field1 from sett_tb_plant_trans where stoptime is not null

それは間違いなく正しい結果をもたらすはずです。ただし、 の同じ値field1がでstoptimeあるテーブル内nullの行がxあります。y1field1y

field1nullである同じfield1値を持つ他の行がない場合の値のみが必要な場合はstoptime、わずかに異なるサブ選択アプローチでそれを行うことができます:

 select 
 field1 from sett_tb_plant_trans 
 where field1 not in 
 (select field1 from sett_tb_plant_trans where stoptime is null)

zこれは PKと を含む行に当てはまるため、2 つの行が得られますk。必要に応じて、 を選択できますdistinct(field1) from ...

于 2013-06-07T15:46:54.483 に答える
0

ネストされたクエリを使用している理由がわかりません。

しません

select field1 from sett_tb_plant_trans where stoptime is not null

仕事?

于 2013-06-07T15:46:41.127 に答える