选择带有 Not IN 关键字的查询

Posted

技术标签:

【中文标题】选择带有 Not IN 关键字的查询【英文标题】:select query with Not IN keyword 【发布时间】:2013-08-24 09:11:00 【问题描述】:

我有两张表如下..

    tbPatientEncounter tbVoucher

当我如下执行select query

Select EncounterIDP,EncounterNumber from tbPatientEncounter

它返回了 180 行。和

Select VoucherIDP,EncounterIDF from tbVoucher

上面的查询返回 165 行。

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

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

它不返回任何行。在第一张图片中它显示了EncounterIDP 9 in tbPatientEncounter,但它没有插入到 tbVoucher 中,因为我尝试过 select Query like

Select * from tbVoucher where EncounterIDF = 9 

它返回 0 行。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

@Gordon Linoff 谢谢你的回答,但你怎么知道EncounterIDF colomn 有空值?【参考方案2】:

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

尝试使用左连接

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

【讨论】:

@podiluska 我想用not in 查询。我的查询出了什么问题。【参考方案3】:

请称我为怀疑论者,因为我认为您的查询没有任何问题。这真的是查询中的全部内容,还是您为我们简化了?

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

【讨论】:

以上是关于选择带有 Not IN 关键字的查询的主要内容,如果未能解决你的问题,请参考以下文章

keywords not in content, more:

为什么要尽量避免使用 IN 和 NOT IN?

为什么要尽量避免使用 IN 和 NOT IN?

为什么要尽量避免使用 IN 和 NOT IN?

带有“not in”的 SQL 查询非常慢

是否可以使用查询参数填充IN关键字