一个数据库查询问题的解决方案
2007-09-19 13:00
295 查看
/*
Author:Roboth
Subject:select one item from months[一月取一条的问题]
*/
/*
CSDN的一个问题
现在有表A和表B
表A
userid username
1 张三
2 李四
表B
userid userlevel
1 1
1 2
1 3
2 1
2 2
现在要用一条sql查询 或者用视图搞定表搞定表A中userid 在表B中userlevel最高的一条 然后输出userid username和usertoplevel.
userid username usertoplevel
1 张三 3
2 李四 2
*/
我的解决方式
--Prepare data
DECLARE @A TABLE(userid int,username varchar(5))
INSERT INTO @A
select 1,'张三 '
union all
select 2,'李四 '
DECLARE @B TABLE(userid int,userlevel int)
INSERT INTO @B
select 1,1
union all
select 1,2
union all
select 1,3
union all
select 2,1
union all
select 2,2
--Method1
select
MAX(A.username),
B.userid,MAX(B.userlevel) as TopLevel
from @B B
INNER JOIN @A A
ON A.userid=B.userid
group by B.userid
--Method2
select A.username,B.*
from @B B
INNER JOIN @A A
ON A.userid=B.userid
where
not exists(select 1 from @B B1 where B1.userlevel>B.userlevel and B1.userid=B.userid)
--Method3
select A.username,B.*
from @B B
INNER JOIN @A A
ON A.userid=B.userid
where
1 > (select COUNT(1) from @B B1 where B1.userlevel>B.userlevel and B1.userid=B.userid)
--Method4
SELECT A.*,(select MAX(B.userlevel) from @B B where B.userid=A.userid)
from @A A
--Method5
SELECT A.*,(select top 1 (B.userlevel) from @B B where B.userid=A.userid order by B.userlevel DESC)
from @A A
--Method6
select A.*,B.userlevel
from @A A
inner join
(
SELECT userid,MAX(userlevel) as userlevel
from @B
group by userid
) B
on A.userid=B.userid
Author:Roboth
Subject:select one item from months[一月取一条的问题]
*/
/*
CSDN的一个问题
现在有表A和表B
表A
userid username
1 张三
2 李四
表B
userid userlevel
1 1
1 2
1 3
2 1
2 2
现在要用一条sql查询 或者用视图搞定表搞定表A中userid 在表B中userlevel最高的一条 然后输出userid username和usertoplevel.
userid username usertoplevel
1 张三 3
2 李四 2
*/
我的解决方式
--Prepare data
DECLARE @A TABLE(userid int,username varchar(5))
INSERT INTO @A
select 1,'张三 '
union all
select 2,'李四 '
DECLARE @B TABLE(userid int,userlevel int)
INSERT INTO @B
select 1,1
union all
select 1,2
union all
select 1,3
union all
select 2,1
union all
select 2,2
--Method1
select
MAX(A.username),
B.userid,MAX(B.userlevel) as TopLevel
from @B B
INNER JOIN @A A
ON A.userid=B.userid
group by B.userid
--Method2
select A.username,B.*
from @B B
INNER JOIN @A A
ON A.userid=B.userid
where
not exists(select 1 from @B B1 where B1.userlevel>B.userlevel and B1.userid=B.userid)
--Method3
select A.username,B.*
from @B B
INNER JOIN @A A
ON A.userid=B.userid
where
1 > (select COUNT(1) from @B B1 where B1.userlevel>B.userlevel and B1.userid=B.userid)
--Method4
SELECT A.*,(select MAX(B.userlevel) from @B B where B.userid=A.userid)
from @A A
--Method5
SELECT A.*,(select top 1 (B.userlevel) from @B B where B.userid=A.userid order by B.userlevel DESC)
from @A A
--Method6
select A.*,B.userlevel
from @A A
inner join
(
SELECT userid,MAX(userlevel) as userlevel
from @B
group by userid
) B
on A.userid=B.userid
相关文章推荐
- sql 批量插入(一个数据库的表数据,添加到另一个数据库表) 数据类型nText和varchar在运算符equals不兼容的问题解决方案
- 数据库插入超时问题的一个原因和解决方案
- 一个数据库查询的问题
- 关于一个数据库分页查询的问题
- 数据库查询压力大、web端容易内存溢出——解决方案、问题总结
- 一个数据库查询的问题
- 关于数据库中英文符号查询问题(解决方案)
- 关于数据库查询的一个问题
- 数据库SQL中的分钟表示应该使用MI(非常重要的一个问题,以前一直认为和java中一样,用mm就可以表示);校对规则(查询时区分大小写)
- 报一个比较难以描述的问题【关键字 报表 数据库行列转换 多表交叉查询】
- 关于数据库查询的一个问题
- 一个查询交易导致数据库CPU使用率高的问题
- 写了一个查询数据库的程序,不熟的Tomcat6。查询条件为英文时运行正常,为中文时出现乱码。后在tomcap的server.xml中加入useBodyEncodingForURI="true解决了问题
- ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询什么 问题?
- Acess 数据库 查询数据表结构等问题小记
- 工作中遇到的问题:百万条数据的查询、删除、修改效率提高的一些思考,解决方案(一)
- _CrtIsValidHeapPointer一个问题解决方案
- ASP 数据库查询的问题
- DELPHI6开发数据库发现的一个问题
- dedecms SP2线上安装时候出现"选择数据库失败,可能是你没权限,请预先创建一个数据库!"解决方案