我觉得问这个有点傻,因为它可能真的很简单。
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中更新的一部分,所以我需要再次运行tbl2 where子句(我曾经使用合并,但在这个DB中不可用)。这里的问题是,tbl2有数百万行,而tbl1有数万行。显然,像这样运行t1xtbl2是非常低效的。我想使用游标和临时表,但我没有看到运行得更好吗?
有人有其他想法吗?
有几种不同的方法来定义这种类型的查询。
请使用Left Join, Not In和Not Exists创建查询,并检查执行计划,只有这样你才能知道哪一个更适合你的情况。
左外连接方式
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
参考:类似讨论区