加盟业绩

zah*_*lan 3 sql-server t-sql sql-server-2012

我在理解为什么此代码在组表 400000 行中返回数百万行时遇到了一些问题。RID 循环和 t2 上的索引查找应返回 1 行,它们返回组表中的所有行。

Create table #group (IDperson uniqueidentifier, MGroup_Idx int, 
NGroup_Idx int)
create index i1 on #group (NGroup_Idx); 

-- insert some data 

SELECT * FROM #group t 
LEFT JOIN #group t2  ON t.NGroup_Idx = t2.NGroup_Idx 
AND t2.MGroup_Idx IS not NULL
WHERE ISNULL(t.MGroup_Idx, t2.MGroup_Idx) IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在此处输入图片说明

Sco*_*red 6

这就是我相信正在发生的事情。

你加入group到它自己。因此,保证能让你之间的匹配所有的行tt2至少一次(因为我没有在看不到你的where子句来限制)。组上可以有多行完全相同NGroup_Idx吗?如果是这样,每t行将匹配多t2行。

如果不是这种情况,请使用一些重现不需要的行为的示例数据更新您的问题。