请教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


两句的效果是一样的,效率上来说哪个比较好..手上没有大数据库进行测试,有没人帮忙看看
...全文
416 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
No4000 2012-04-16
NOT IN是不存在的几率
left outer 是联合查询

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

结果是一样的吧..
  • 打赏
  • 举报
回复
[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]

还没注意,你第二个语句有问题,跟第一个不是一回事
  • 打赏
  • 举报
回复

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
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
申请成为版主
帖子事件
创建了帖子
2012-04-16 10:50
社区公告
暂无公告