gpt4 book ai didi

sql - NOT IN() 的替代方法

转载 作者:行者123 更新时间:2023-12-02 22:48:59 25 4
gpt4 key购买 nike

我有一个包含 2012 年 11 月的 14,028 行的表。我还有一个包含 2013 年 3 月的 13,959 行的表。我使用一个简单的 NOT IN() 子句来查看谁离开了:

select * from nov_2012 where id not in(select id from mar_2013)

这返回了 396 行,我从来没有考虑过它,直到我去分析谁离开了。当我提取丢失成员的所有 ID 并将它们放入临时表 (##lost) 中时,其中 32 个实际上仍在 mar_2013 表中。当我使用以下命令搜索它们的 id 时,我可以将它们拉出来:

select * from mar_2013 where id in(select id from ##lost)

我不明白发生了什么事。我要提到的是,我创建的 id 字段是一个 IDENTITY 列。这会对使用 NOT IN 的匹配产生影响吗?有没有更好的方法来检查表之间是否缺少行?我也尝试过:

select a.* from nov_2012 a left join mar_2013 b on b.id = a.id where b.id is NULL

并收到相同的结果。

这就是我创建身份字段的方式;

create table id_lookup( dateofcusttable date ,sin int ,sex varchar(12) ,scid int identity(777000,1)) 
insert into id_lookup (sin, sex) select distinct sin, sex from [Client Raw].dbo.cust20130331 where sin <> 0 order by sin, sex

这就是我将 scid 添加到 March 表中的方法:

select scid, rowno as custrowno
into scid_20130331
from [Client Raw].dbo.cust20130331 cust
left join id_lookup scid
on scid.sin = cust.sin
and scid.sex = cust.sex

update scid_20130331
set scid = custrowno where scid is NULL --for members who don't have more than one id or sin information is not available

drop table Account_Part2_Current
select a.*, scid
into Account_Part2_Current
from Account_Part1_Current a
left join scid_20130331 b
on b.custrowno = a.rowno_custdmd_cust

然后我按 scid 对所有信息进行分组

最佳答案

我更喜欢这种形式(和 here's why ):

SELECT a.id --, other columns 
FROM dbo.nov_2012 AS a
WHERE NOT EXISTS (SELECT 1 FROM dbo.mar_2013 WHERE id = a.id);

但是,这仍然应该给出与您尝试过的结果相同的结果,因此我怀疑您没有告诉我们有关数据模型的某些内容 - 例如,是 mar_2013.id可以为空吗?

关于sql - NOT IN() 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16105761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com