我在优化查询时遇到问题。这是我正在使用的两个示例表:
Table 1:
UID
A
B
Table 2:
UID Parent
A 2
B 2
C 3
D 2
E 3
F 2
这是我现在正在做的事情:
Select Table1.UID
FROM Table1 R
INNER JOIN Table2 T ON
R.UID = T.UID
INNER JOIN Table2 E ON
T.PARENT = E.PARENT
AND E.UID NOT IN (SELECT UID FROM Table1)
我试图避免使用 NOT IN 子句,因为大量记录的性能存在明显障碍。
我知道避免 NOT IN 子句的典型方法,例如另一个表为空的 LEFT JOIN,但似乎无法在所有其他加入的情况下得到我想要的。
如果我找到解决方案,我将继续工作并发布。
编辑:这是我想要结束的
在第一次内部加入之后,我会
A
B
在第二次内部加入之后,我将拥有:
A D
A F
B D
B F
上面的第二列只是为了表示它与具有相同父级的其他 UID 匹配,但我仍然需要 As 和 Bs 作为 UID。
编辑:RDBMS 是 SQL server 2005、2008r2、2012
Table1 在没有索引的查询中声明
DECLARE @Table1 TABLE ( [UNIQUE_ID] INT PRIMARY KEY )
Table2 在唯一 ID 上有一个聚集索引