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)
这就是我相信正在发生的事情。
你加入group
到它自己。因此,保证能让你之间的匹配所有的行t
和t2
至少一次(因为我没有在看不到你的where子句来限制)。组上可以有多行完全相同NGroup_Idx
吗?如果是这样,每t
行将匹配多t2
行。
如果不是这种情况,请使用一些重现不需要的行为的示例数据更新您的问题。