2016-02-15 66 views
1

我得到了兩個表A和B.A和B之間存在一對多關係.A_Id是一個外鍵。sql select from one to many

  Create table A(Id int,Name varchar(50)) 
     create table B(Id int,A_Id int,Title varchar(50)) 

     insert into A Values(1,'name1'); 
     insert into A Values(2,'name2'); 
     insert into A Values(3,'name3'); 
     insert into A Values(4,'name4'); 

     insert into B Values(10,1,'title1'); 
     insert into B Values(11,1,'title5'); 
     insert into B Values(12,2,'title2'); 
     insert into B Values(13,2,'title6'); 
     insert into B Values(14,3,'title3'); 

我需要從表A中獲取記錄並從表B中獲取匹配記錄 的標題。如果表B中存在多個值,那麼我需要選擇帶有最大Id的記錄(表B)。

例如。 A_Id 1的表B中有兩條記錄。我需要從表A中選擇一行,從表B中選擇'title5'以查找匹配記錄。

我試圖

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

回答

1

可以使用內A_Id分區使用ROW_NUMBER枚舉記錄派生表:

​​

派生表BB.rn = 1的記錄是具有最大的一個Id值在其分區內,並且是在INNER JOIN操作中使用的值。

Demo here

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 
0

這可能不會太有效的性能,但肯定工程:)

選擇一個。*,b.title FROM a,b 其中a.id = b.a_id 和b.id =(從b中選擇max(b.id) ere A_Id = a.id)

相關問題