我觉得这有点傻,因为它可能很简单。
Select DISTINCT ID from tbl1
where col2='abc'
...
and ID not in (select distinct tbl2.ID from tbl2 where tbl2.Dtm > '2010-01-01')
这是我在TSQL中upsert的一部分,所以Id需要再次运行tbl2 where子句(我曾经使用merge但它在这个DB中不可用)。这里的问题是tbl2有数百万行,而tbl1有数万行。显然像tb1xtbl2一样运行它效率极低。我曾想过使用游标和临时表,但我没有看到运行得更好?
有人有其他想法吗?
答案 0 :(得分:1)
有几种不同的方法可以定义这种类型的查询。
请使用“左连接”,“不存在”和“不存在”创建查询并检查执行计划,只有这样您才会知道哪一个更适合您的情况。
左外连接方式
Select Distinct ID
FROM tbl1 t1
LEFT OUTER JOIN tbl2 on t1.ID = t2.ID and t2.DTM > '2010-01-01'
WHERE
t1.Col2 = 'abc'
AND t2.ID IS NULL
参考: