欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

两表连接查询的有关问题,求速度,

更新时间: 2014-01-05 02:17:40 责任编辑: Author_N1

 

两表连接查询的问题,在线等,求速度,急!!!
B表是A表的明细表,A表中的一条记录对应B表中的多条记录,我要查到结果只想取B表中对应A表的一条,不要多条都出来。怎么搞,在线等,大哥们速度啊!!!

表结构如下 :
A表 
id   zd1   zd2  
1    111   111
2    222   222
B表
aid    zd3   zd4
1      www   www
1      sss   sss
2      qqq   qqq
2      eee   eee

我想要的查询结果:
id  zd1  zd2   zd3   zd4
1   111  111   www   www
2   222  222   qqq   qqq

--参考方法--
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-12-25 15:24:58
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([id] int,[zd1] int,[zd2] int)
insert [A]
select 1,111,111 union all
select 2,222,222
--> 测试数据:[B]
if object_id('[B]') is not null drop table [B]
go 
create table [B]([aid] int,[zd3] varchar(3),[zd4] varchar(3))
insert [B]
select 1,'www','www' union all
select 1,'sss','sss' union all
select 2,'qqq','qqq' union all
select 2,'eee','eee'
--------------开始查询--------------------------


select a.*,b.zd3,b.zd4 from [A] a INNER JOIN (SELECT aid,MAX(zd3)zd3,MAX(zd4)zd4 FROM b GROUP BY aid) b ON a.id=b.aid
----------------结果----------------------------
/* 
id          zd1         zd2         zd3  zd4
----------- ----------- ----------- ---- ----
1           111         111         www  www
2           222         222         qqq  qqq
*/

--参考方法--
取www   www 还是sss   sss还什么规则么?
还是取哪个都行?


select a.*,b.zd3,b.zd4 from A表 a left join 
(
select aid  ,  max(zd3) as zd3  , max(zd4) as zd4 from B表 group by aid
) b on a.id =b.aid



--参考方法--


create table A表(id int,   zd1 int,   zd2  int)

insert into A表
select 1    ,111,   111 union all
select 2    ,222,   222

create table B表(aid int,    zd3 varchar(20),   zd4 varchar(20))

insert into B表
select 1      ,'www'   ,'www' union all
select 1      ,'sss'   ,'sss' union all
select 2      ,'qqq'   ,'qqq' union all
select 2      ,'eee'   ,'eee'


select a.*,b.zd3,b.zd4
from A表 a
inner join
(
select *,
       ROW_NUMBER() over(partition by aid order by @@servername) rownum
from B表
)b
 on a.id = b.aid
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:40
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8114/
本文WWW.DOC100.NET DOC100.NET版权所有。