菜鸟求一个不算太难的SQL语句。

hanyangjian 2010-03-05 11:09:16
A表
id title
1 生活
2 娱乐
3 旅游

B表
id URL Aid
1 地址1 1
2 地址2 1
3 地址3 1
4 地址4 2
5 地址5 2



需要结果
aid tile url
1 生活 地址3
2 娱乐 地址5
3 旅游 null
...全文
74 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
心中的彩虹 2010-03-05
  • 打赏
  • 举报
回复
--表结构及记录
if object_id('A') is not null drop table A
create table A(id int, title varchar(10))
insert into a values(1 , '生活')
insert into a values(2 , '娱乐')
insert into a values(3 , '旅游')
if object_id('B') is not null drop table B
create table B(id int, URL varchar(10), Aid int)
insert into b values(1 , '地址1' , 1 )
insert into b values(2 , '地址2' , 1 )
insert into b values(3 , '地址3' , 1 )
insert into b values(4 , '地址4' , 2 )
insert into b values(5 , '地址5' , 2 )
--语句
select A.id as aid,title,max(URL)
from A left join B on A.id=b.aid
group by a.id,title
jiyan1221 2010-03-05
  • 打赏
  • 举报
回复
LZ第一列是aid ?如果是aid,给的题目好像有问题啊
叶子 2010-03-05
  • 打赏
  • 举报
回复


declare @A表 table (id int,title varchar(4))
insert into @A表
select 1,'生活' union all
select 2,'娱乐' union all
select 3,'旅游'

declare @B表 table (id int,URL varchar(5),Aid int)
insert into @B表
select 1,'地址1',1 union all
select 2,'地址2',1 union all
select 3,'地址3',1 union all
select 4,'地址4',2 union all
select 5,'地址5',2

select a.* ,
b.url
from @A表 a
left join ( select Aid ,
max(URL) as url
from @B表
group by Aid
) b on a.id = b.Aid

/*
id title url
----------- ----- -----
1 生活 地址3
2 娱乐 地址5
3 旅游 NULL
*/
chinesesword 2010-03-05
  • 打赏
  • 举报
回复
select aid ,tile, MAX(url) from
A left join B where A.id=B.Aid
group by aid ,tile
--小F-- 2010-03-05
  • 打赏
  • 举报
回复
select
a.* , t.url
from
a left join b t
on
a.id = t.aid
and
t.id = (select max(id) from b where aid = t.aid)
dawugui 2010-03-05
  • 打赏
  • 举报
回复
create table A(id int, title varchar(10))
insert into a values(1 , '生活')
insert into a values(2 , '娱乐')
insert into a values(3 , '旅游')
create table B(id int, URL varchar(10), Aid int)
insert into b values(1 , '地址1' , 1 )
insert into b values(2 , '地址2' , 1 )
insert into b values(3 , '地址3' , 1 )
insert into b values(4 , '地址4' , 2 )
insert into b values(5 , '地址5' , 2 )
go

select a.* , t.url
from a left join b t
on a.id = t.aid and t.id = (select max(id) from b where aid = t.aid)

select a.* , t.url
from a left join b t
on a.id = t.aid and not exists (select 1 from b where aid = t.aid and id > t.id)

drop table a , b

/*
id title url
----------- ---------- ----------
1 生活 地址3
2 娱乐 地址5
3 旅游 NULL

(所影响的行数为 3 行)

id title url
----------- ---------- ----------
1 生活 地址3
2 娱乐 地址5
3 旅游 NULL

(所影响的行数为 3 行)

*/
bancxc 2010-03-05
  • 打赏
  • 举报
回复
select A.*,url=(select top 1 url from b where b.aid=a.id order by id desc) from A
dawugui 2010-03-05
  • 打赏
  • 举报
回复
select a.* , t.url
from a left join b t
on a.id = t.aid and t.id = (select max(id) from b where aid = t.aid)
bancxc 2010-03-05
  • 打赏
  • 举报
回复
select A.*,url from A left join B on A.id=B.Aid
bancxc 2010-03-05
  • 打赏
  • 举报
回复
select A.*,url from A left join B where A.id=B.Aid

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧