假设我有这张表:
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
我只想选择z
和k
,因为它们为所有行填充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
为什么?
答案 0 :(得分:2)
您应该可以像这样简化查询:
select field1 from sett_tb_plant_trans where stoptime is not null
绝对应该给出正确的结果。但是,您的表中有一些行field1
的{{1}} stoptime
的值null
,例如PK x
和y
的行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 z
和k
的行,它是正确的。根据您的需要,您可能需要选择distinct(field1) from ...
。
答案 1 :(得分:0)
我对你使用嵌套查询的原因感到困惑。
不会
select field1 from sett_tb_plant_trans where stoptime is not null
工作?