if object_id('tb') is not null drop table tb
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('b', 1, 'b1--b的第一个值')
insert into tb values('b', 3, 'b3:b的第三个值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')select * from tb a where not exists (select 1 from tb b where b.name = a.name and b.val > a.val)
select * from tb a where not exists (select 1 from tb b where b.name = a.name and a.val > b.val)
下面2个查询的结果是
a 3 a3:a的第三个值
b 5 b5b5b5b5b5
=========================================
a 1 a1--a的第一个值
b 1 b1--b的第一个值
搞糊涂了
这个理解但是对查询结果不是很明白。
这个和ASCII比较啥关系啊
高手能不能帮我讲具体点啊
第二个语句是取相同名字当中,val值最小的那条。有什么问题么?
语句的作用是取相同NAME中VAL最大的,因为有两个NAME A,B,所以有两条记录。
A的记录中
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
先比较第一个字符,都是a,相等,再比较第二个字符,分别是2,1,3。3的ASCII码最大,所以
insert into tb values('a', 3, 'a3:a的第三个值')
这条记录显示。B是一样的。
想问的是为啥一个是
b.val > a.val
另一个
a.val > b.val
出现的效果怎么不一样啊
一个是同组的最大值
一个是最小值
--第一个语句
--以name='a'为例子select * from tb a where not exists (select 1 from tb b where b.name = a.name and b.val > a.val)在表a中找一条记录,满足2条件:
1:name='a'
2:并且b中不存在val大于a中val的记录,显示a中val最大的那条记录3,在b里没有比3更大的
---第2个同理