CREATE TABLE #b (
[id] [char] (10),
[name] [char] (10)
)insert into #b(id,name) values('11','aaaa')
insert into #b(id,name) values('11','bbbb')
insert into #b(id,name) values('11','cccc')
insert into #b(id,name) values('22','dddd')
insert into #b(id,name) values('22','eeee')
insert into #b(id,name) values('22','ffff') select * from #b b where name=(select top 1 name from #b where id=b.id)drop table #b结果是 id name
11 aaaa
22 dddd
如果我执行这句
select top 1 name from #b b where id=b.id 返回结果只有一个aaaa
那么select * from #b b where name='aaaa'就应该只有第一条记录啊为啥会是2条??
[id] [char] (10),
[name] [char] (10)
)insert into #b(id,name) values('11','aaaa')
insert into #b(id,name) values('11','bbbb')
insert into #b(id,name) values('11','cccc')
insert into #b(id,name) values('22','dddd')
insert into #b(id,name) values('22','eeee')
insert into #b(id,name) values('22','ffff') select * from #b b where name=(select top 1 name from #b where id=b.id)drop table #b结果是 id name
11 aaaa
22 dddd
如果我执行这句
select top 1 name from #b b where id=b.id 返回结果只有一个aaaa
那么select * from #b b where name='aaaa'就应该只有第一条记录啊为啥会是2条??
返回每个ID的第一条记录。select top 1 name from #b b where id=b.id
因为有top 1,所以只返回一个aaaa,至于where id=b.id,这样写没意义,等于没写。select * from #b b where name='aaaa'
我试了,就只返回了一条记录啊。
TOP 1 了,所以只返回 1 条记录;那么select * from #b b where name='aaaa'就应该只有第一条记录啊为啥会是2条??
这个不会的,前面的数据,只有一个符合条件的;建议你再测试一下;
CREATE INDEX IX_#tb ON #b(ID,Name DESC);
select * from #b b where name=(select top 1 name from #b where id=b.id)
/*id name
11 cccc
22 ffff */
drop table #b
@zbdzjx select * from #b b where name=(select top 1 name from #b where id=b.id)
返回每个ID的第一条记录。我的意思就是为啥这句话是返回每个id的第一条记录,明明子语句的top 1只会返回一条name,
那么前面的语句是where name=查询出来应该也只有一条啊
我的意思就是说子语句top 1 name只返回一条,那么为啥where name=(查询出的一个top1 name)会返回多条
b.id 共可以取两个值,一个是 11 一个是 22 ,所以取出来了两条;
如果insert into #b(id,name) values('11','aaaa') 这条语句,执行两次,那么,这个查询的结果, 可能会是 2 条,也可能是 3 条; 也就是说的不稳定;