如何从B数据表中取出与A数据表相关的记录而不是全部记录???

chinabbc 2003-10-08 09:55:45
想从两个数据表中读取id字段相同的记录,A、B表的结构如下:

数据表A
id name
1 a
2 b
3 c

数据表B
id soft order
1 aaa 1
1 bbb 2
2 ccc 3
2 ddd 4
3 eee 5
3 fff 6
3 ggg 7

要实现的结果是读出A表的每一条记录,并找到B表中id字段与其匹配的记录,记录首先按A表的id字段升序排列,而取出的B表记录按oredr降序排列,仅取出与A表相匹配的第一条,具体结果如下:
id name soft order
1 a bbb 2
2 b ddd 4
3 c ggg 7

但是我把内连接、左连接、右连接等几种方法都试完了,结果都是这样:
id name soft order
1 a aaa 1
1 a bbb 2
2 b ccc 3
2 b ddd 4
3 c eee 5
3 c fff 6
3 c ggg 7

该如何解决?具体的sql语句应当如何写?排序应当如何实现?
...全文
69 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hemeijun81 2003-10-09
  • 打赏
  • 举报
回复
playyuer(双规干部) 最简洁明了
chinabbc 2003-10-09
  • 打赏
  • 举报
回复
good
meteorlg 2003-10-09
  • 打赏
  • 举报
回复
playyuer(双规干部) 效率最高
chinabbc 2003-10-08
  • 打赏
  • 举报
回复
啊,这么复杂啊,以上语句主要有什么区别?如果两表数据量较大,哪一种语句效率最高,速度最快?
DigJim 2003-10-08
  • 打赏
  • 举报
回复
select A.*,
(select top 1 B.soft from B as B where A.a=B.a order by B.order desc),
(select top 1 B.order from B as B where A.a=B.a order by B.order desc)
from A as A
welyngj 2003-10-08
  • 打赏
  • 举报
回复
select c.[id],c.[name],c.soft,b.[order]from b,
(select top 100 a.[id], a.[name], max(b.soft) as soft from a ,b where a.id=b.id group by a.[id],a.[name] order by a.[id] )as c
where c.soft=b.soft
playyuer 2003-10-08
  • 打赏
  • 举报
回复
select *
from A left join B on A.id = b.ID and B.order = (select max(order) from B where A.Id = ID)

34,590

社区成员

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

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