使用Not IN关键字选择查询

时间:2013-08-24 09:11:00

标签: sql sql-server select notin

我有两个表,如下所示..

  1. tbPatientEncounter
  2. tbVoucher
  3. 当我执行select query时如下

    Select EncounterIDP,EncounterNumber from tbPatientEncounter
    

    enter image description here

    它回复了180行。和

    从tbVoucher中选择VoucherIDP,EncounterIDF

    enter image description here

    上面的查询返回165行。

    但我想执行选择查询,返回我的数据,如EncounterIDP不在tbVoucher中,因为我在下面尝试过选择查询......

        Select * from tbPatientEncounter pe 
        where pe.EncounterIDP not in 
        (Select v.EncounterIDF from tbVoucher v )
    

    它不会返回任何行。在第一个图像中,它显示EncounterIDP 9 in tbPatientEncounter,但它没有插入tbVoucher,因为我尝试了选择查询,如

    Select * from tbVoucher where EncounterIDF = 9 
    

    它返回0行。

    我的问题是what is wrong with my above Not In Query.?

3 个答案:

答案 0 :(得分:2)

您是否在比较tbVoucher中的正确字段?

尝试使用左连接

Select EncounterIDP,EncounterNumber from tbPatientEncounter
       left join tbVoucher on EncounterIDP = EncounterIDF
where EncounterIDF is null

答案 1 :(得分:2)

问题很可能是NULL中的tbVoucher值。试试这个:

Select *
from tbPatientEncounter pe 
where pe.EncounterIDP not in (Select v.EncounterIDF
                              from tbVoucher v
                              where v.EncounterIDF is not NULL
                             )

答案 2 :(得分:0)

叫我一个怀疑论者,因为我没有看到你的查询有任何问题。这真的是在查询中还是为您简化了它?

Select * from tbPatientEncounter pe 
where pe.EncounterIDP not in 
(Select v.EncounterIDF from tbVoucher v )