• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

请教left outer join和no in的不同

离子漂浮物 2012-04-16 10:50:25
not In
select * from table where id not in (select top 100 id from table order by id desc)

left outer join

select * from table left outer join (select top 100 id as tId from table order by id desc) t on t.tId = table.id where t.tId is null


两句的效果是一样的,效率上来说哪个比较好..手上没有大数据库进行测试,有没人帮忙看看
...全文
335 点赞 收藏 8
写回复
8 条回复
No4000 2012年04月16日
NOT IN是不存在的几率
left outer 是联合查询

回复 点赞
离子漂浮物 2012年04月16日
没有啊,这边测试的运行结果两个都是一样的呢。
第一次是搜索不包括table表top 100 id的记录
第二个是table表与top 100表联合查询top表ID为null的记录。

结果是一样的吧..
回复 点赞
开着拖拉机泡妞 2012年04月16日
[Quote=引用楼主 的回复:]
not In
SQL code
select * from table where id not in (select top 100 id from table order by id desc)

left outer join
SQL code

select * from table left outer join (select top 100 id as tId from t……
[/Quote]

还没注意,你第二个语句有问题,跟第一个不是一回事
回复 点赞
开着拖拉机泡妞 2012年04月16日

go
if OBJECT_ID('tbl')is not null
drop table tbl
go
create table tbl(
id int identity(1,1),
QQ VARCHAR(10)
)
go
declare @a int
set @a=1
while @a<=1000000
begin
insert tbl
select ltrim(cast(RAND()*1000000000 as int))
set @a=@a+1
end
select * from tbl where id not in (select top 100 id from tbl order by id desc)
--110万条数据不加任何索引第一次30s,第二次24s
select * from tbl left join
(select top 100 id as tId from tbl order by id desc) t
on t.tId = tbl.id where t.tId is null
--110万条数据不加任何索引第一次24s,第二次24s
回复 点赞
xqlsaber 2012年04月16日
执行结果都不一样,不能比较的
回复 点赞
APHY 2012年04月16日
你的语句有问题,效果不一样,你再仔细看看~
回复 点赞
小天 2012年04月16日
伪命题
回复 点赞
leijunyuncyuyan 2012年04月16日
你这两句的效果明显不一样
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告