我对这两个查询的结果感到惊讶.我期待两者都一样.我有两个共享一个共同字段的表,但没有设置关系.table(A)有一个字段EventID varchar(10),table(B)有一个字段XXNumber varchar(15).
表B列XXNumber中引用了表A列中的值EventID.即使XXNumber可以容纳15个字符,179K行数据也不会超过10个字符.
所以要求是:
"为了避免重复表B和表A条目,如果XXNumber包含在表A>"事件ID"中,则不应计算它."
要查看我有多少常见记录,我首先运行此查询 - 称之为查询alpha"
SELECT dbo.TableB.XXNumber FROM dbo.TableB WHERE dbo.TableB.XXNumber in
( select distinct dbo.TableA.EventId FROM dbo.TableA )
Run Code Online (Sandbox Code Playgroud)
结果是5322行.
以下查询 - 将其称为查询delta,如下所示:
SELECT DISTINCT dbo.TableB.XXNumber, dbo.TableB.EventId
FROM dbo.TableB INNER JOIN dbo.TableA ON dbo.TableB.XXNumber= dbo.TableB.EventId
Run Code Online (Sandbox Code Playgroud)
哈斯返回4308行.
结果行数不应该相同吗?
该WHERE ID IN ()版本将选择与列表中每个不同值匹配的所有行(无论您是否DISTINCT在内部选择内部编码- 这都是无关紧要的).如果给定值多次出现在父表中,您将从父表中为子表中找到的单个值中选择多个行.
该INNER JOIN版本将选择从父表中的每一行一次,每一个成功的加盟,因此,如果有与价值的子表3排,并在父2,那么就会出现在结果为价值6点的行.
要使它们"相同",请在主选择中添加"DISTINCT".
为了解释您所看到的内容,我们需要了解您的实际数据.