gpt4 book ai didi

sql-server - SQL - 记录不在另一个表中

转载 作者:行者123 更新时间:2023-12-01 06:17:49 27 4
gpt4 key购买 nike

在做我认为是在一个表中查找另一个表中不存在的记录的相当例行的任务时,我开始如下所示。注意:公共(public)值在一个表中是 float 类型(因此是强制转换),在另一个表中是 varchar(20) 类型。 MEMID=float,DMID=varchar。

select cast((convert(int, MEMID)) as varchar(20))
from tempProv111315
where cast((convert(int, MEMID)) as varchar(20)) NOT IN (
SELECT DMID
FROM tempMemberMaster121015
)

上面没有返回记录(即使我知道有一些存在)。因此,我尝试了以下方法(有效)。

select cast((convert(int, pv.MEMID)) as varchar(20))
from tempProv111315 pv
left outer join tempMemberMaster121015 mm on
cast((convert(int, pv.MEMID)) as varchar(20)) = mm.dmid
where mm.dmid is null

虽然可能是一个简单的原因,但就我的生活而言,我不明白为什么第一种方法不起作用。我不是 dba,但在不同情况下经常使用这两种方式,所以我真的很想了解我所缺少的。任何人都可以解释不同的结果,因为他们看起来在逻辑上与我相同。

ps - 我熟悉几种抛出 float 的方法。这是我的典型方法。我不认为这是问题所在...但如果是这样,为什么它在第二个语句中工作正常?

谢谢!

最佳答案

这是一个已知的行为,您的子查询将返回 NULL,这使得 not in 失败。可以找到更多信息 here

NOT IN
(
SELECT DMID -- check whether this returns any NULL value
FROM tempMemberMaster121015
)

我建议您使用 NOT EXIST 而不是 Left Outer Join

关于sql-server - SQL - 记录不在另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228628/

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