需要获取表“#Tbl1”的所有记录,表“#Tbl2”

时间:2016-10-12 08:53:54

标签: sql-server-2008

我需要获取表“#Tbl1”的所有记录,其中“DisplayId”不在表“#Tbl2”中。

  1. “#Tbl1”拥有最多100条记录
  2. “#Tbl2”正在增长表

    创建表#Tbl1(Id1 Int Identity(1,1),DisplayId Nvarchar(200),Name Nvarchar(200)) 插入#Tbl1(DisplayId,Name)值('d1','ABC'),('d2','PQR')

    创建表#Tbl2(Id2 Int Identity(1,1),DisplayId Nvarchar(200)) 插入#Tbl2(DisplayId)值('d1')

  3. 以下查询正在运行,但是要查找有效的查询,请建议哪个表的列需要哪种索引?

    我正在使用SQL Server 2008 R2

    Select * From #Tbl1
    Where DisplayId Not In (Select DisplayId From #Tbl2)
    

1 个答案:

答案 0 :(得分:0)

使用in语句似乎总体上看起来很慢,如果可能的话我会使用exists语句,但我不确定它是否在SQL Server 2008上受支持。其他选项是左连接也会很慢

存在或(不存在)语句的工作原理如下

select * from #tbl1 t1 
where not exists (select displayid from #tbl2 where displayid = t1.displayid)

注意使用别名t1,您不必在子选择中选择一列,您可以使用通配符*。我发现这种类型的查询效率更高,因为它直接在2个表之间使用索引链接,而不是先选择所有列然后过滤它们。