首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

3表连查

2013-11-08 
三表连查有三表TAID XX YY1x1 y12x2 y2TB(本表的唯一性ID我不写了)ID TIME12013.1.412013.1.612013.1.5220

三表连查
有三表
TA
ID XX YY
1  x1 y1
2  x2 y2

TB(本表的唯一性ID我不写了)
ID TIME
1  2013.1.4
1  2013.1.6
1  2013.1.5
2  2013.1.11

TC
ID NAME PHOTO
1  AA   xyxy
2  BB   abab

求SQL语句以得到如下表
ID XX  YY  行数  最新时间      PHOTO
1  x1  y1  3    2013.1.6     xyxy
2  x2  y2  1    2013.1.11    abab
[解决办法]
select ta.*,b.ct 行数,b.dt 最新时间,c.photo from ta a
inner join (select id,count(1) ct,max([time])dt from tb group by id) b on a.id=b.id
inner join tc c on b.id=c.id 
[解决办法]

create table TA
(
  ID int,
  XX varchar(50),
  YY varchar(50)
)
go
insert into TA
select 1,'x1','y1' union all
select 2,'x2','y2'
go
create table TB
(
  ID int,
  TIME datetime
)
go
insert into TB
select 1,'2013.1.4' union all
select 1,'2013.1.6' union all
select 1,'2013.1.5' union all
select 2,'2013.1.11'
go
create table TC
(
Id int,
Name varchar(50),
PHOTO varchar(50)
)
insert into TC
select 1,'AA','xyxy' union all
select 2,'BB','abab'
go

--查询语句

declare @time datetime
set @time=(select MAX(time) from TB where ID=1)
select TA.ID,TA.XX,TA.YY,temp.calcid '行数',@time '时间',TC.PHOTO
from TA
left join(select ID,COUNT(*) as calcid from TB group by ID) as temp on TA.ID=temp.ID
left join TC on TA.ID=TC.Id 

ID          XX          YY            行数          时间                      PHOTO
----------- -------- ------------- --------------------------------------- -----------
1           x1          y1             3           2013-01-06 00:00:00.000   xyxy
2           x2          y2             1           2013-01-06 00:00:00.000   abab



(2 行受影响)


[解决办法]

create table TA
(
  ID int,
  XX varchar(50),
  YY varchar(50)
)
go
insert into TA
select 1,'x1','y1' union all
select 2,'x2','y2'
go
create table TB
(
  ID int,
  TIME datetime
)
go
insert into TB
select 1,'2013.1.4' union all
select 1,'2013.1.6' union all
select 1,'2013.1.5' union all
select 2,'2013.1.11'
go
create table TC
(
Id int,
Name varchar(50),
PHOTO varchar(50)
)
insert into TC
select 1,'AA','xyxy' union all
select 2,'BB','abab'
go

--查询语句
select TA.ID,TA.XX,TA.YY,temp.calcid '行数',temp.time '时间',TC.PHOTO
from TA
left join(select ID,COUNT(*) as calcid,MAX(TIME) as [time] from TB group by ID) as temp on TA.ID=temp.ID
left join TC on TA.ID=TC.Id 
//运行结果
ID          XX          YY       行数          时间                      PHOTO
----------- ------ ---------- ----------- ----------------------- --------------
1           x1          y1       3        2013-01-06 00:00:00.000       xyxy
2           x2          y2       1        2013-01-11 00:00:00.000       abab

(2 行受影响)

热点排行