Sql Query选择不在另一个集合中的所有行

时间:2013-06-07 15:42:58

标签: sql

假设我有这张表:

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

我只想选择zk,因为它们为所有行填充stoptime,为field1填充相同的“密钥”。

我做了这个查询:

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

但返回一些field1,其中包含stoptime null

的行

为什么?

2 个答案:

答案 0 :(得分:2)

您应该可以像这样简化查询:

select field1 from sett_tb_plant_trans where stoptime is not null

绝对应该给出正确的结果。但是,您的表中有一些行field1的{​​{1}} stoptime的值null,例如PK xy的行1的值field1相同,但y停止时间为空。

如果您只希望那些field1的值没有其他行具有相同field1值且stoptime为空的值,则可以使用选择方法,略有不同:

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

这将为您提供2行,因为对于具有PK zk的行,它是正确的。根据您的需要,您可能需要选择distinct(field1) from ...

答案 1 :(得分:0)

我对你使用嵌套查询的原因感到困惑。

不会

select field1 from sett_tb_plant_trans where stoptime is not null

工作?