SQL语句连接查询的问题

比如有表A

ID name
1 x
2 y
3 z

表B
ID rank
1 10
1 15
1 30
2 28
2 12
3 24
3 22

我想连接查询对应ID的rank,但是只要最大的rank值
ID name rank
1 x 30
2 y 28
3 z 24
sql如何写?

select b.ID,a.name,max(b.rank) from A a,B b where a.ID=b.ID group by a.ID

如果是oracle数据库,可以使用窗口函数。

select a.name,max(b.rank) from A a,B b where a.ID=b.ID group by a.ID

SELECT a.ID,a.name, b.rank
FROM name a
LEFT JOIN
(SELECT max(b.rank),
b.ID
FROM rank b
group by b.ID) t
0N t.ID = a.ID

试一下这个语句。
SELECT * FROM A aa
INNER JOIN (SELECT id,MAX(Rank) FROM B GROUP BY id) bb ON aa.id=bb.id

一般这样就可以 :
select a.id,a.name,max(b.rank) rank from A a,B b where a.ID=b.ID group by a.ID,a.name

如果希望出现所有的ID,哪怕rank最大值为空也出现的写法 :
select a.id,a.name,max(b.rank) rank from A a left join B b on a.ID=b.ID group by a.ID,a.name