sql从一个到多个选择

时间:2016-02-15 06:40:03

标签: sql join greatest-n-per-group

我有两张A和B表.A和B之间存在很多关系.A_Id是外键。

     SELECT A.*, B.Title FROM A JOIN B ON A.Id = B.A_Id 

我需要从表A中获取记录,从表B中获取匹配记录的标题 。如果表B中存在多个值,则需要选择具有最大Id的记录(表B)。

例如。表B中有两个A_Id 1的记录。我需要从表A和' title5'中选择一行。来自表B,用于匹配记录。

我试过

{{1}}

3 个答案:

答案 0 :(得分:1)

您可以使用使用ROW_NUMBER的派生表来枚举A_Id分区中的记录:

select A.Id, A.Name, B.Title
from A
inner join (
   select A_Id, Title,
          ROW_NUMBER() OVER (PARTITION BY A_Id ORDER BY Id DESC) AS rn
   from B
) AS B on A.Id = B.A_Id and B.rn = 1

B的派生表B.rn = 1的记录是其分区中具有最大Id值的记录,并且是INNER JOIN操作中使用的值。 / p>

Demo here

答案 1 :(得分:0)

试试这个

sql Fiddle

select A.Id, A.Name,b.title
from A
inner join (
   select A_Id, max(id) as id
   from B group by A_Id
) AS c on A.Id = c.A_Id 
inner join b  on b.id = c.id 

答案 2 :(得分:0)

这可能不太有效,但肯定有效:)

选择a。*,b.title 从a,b 其中a.id = b.a_id 和b.id =(从b中选择max(b.id),其中A_Id = a.id)