2010-04-29 90 views
1

基本上,我想要做的是將4個表連接在一起,併爲每條船返回1行。SQL Server返回每行1行

表佈局

[船]

id, date, section, raft 

[照片]

id, boatid, pthurl, purl 

[River_Company]

id, sort, company, company_short 

[River_Section]

id, section 

它非常簡單,只要結構,但是,我有我的生活的時間試圖讓它只返回1行。沒有船會在同一天,唯一讓這件事變得糟糕的是照片桌。

如果你知道更好的方式來返回所有的船隻的記錄表,並只有1張照片從照片表,請張貼它!

所需的格式

boats.id, boats.date, river_company.company, river_section.section, photos.purl, photos.pthurl 

回答

4

這基本上是如何加入工作。由於boatsphotos一對多關係和你想一對一類似的查詢,你需要明確表示與謂詞。例如:

select b.* 
from 
    boats b 
    inner join photos p 
     on b.id = p.boatid 
where p.id = (select max(id) from photos where boatid = b.id) 
+0

的選擇B。*,P * 從 船b 內部聯接照片到b.id = p.boatid 其中p.id =(從照片中選擇最大值(ID),其中boatid = b.id) p 完美工作。謝謝。 – Landmine 2010-04-29 06:26:59

1

假設你ID列的關係,你已經設計:

SELECT Boats.* FROM Boats 
    LEFT OUTER JOIN Photos on Photos.ID = 
      (
       SELECT TOP 1 Photos.ID FROM Photos 
       INNER JOIN Boats ON Photos.BoatID = Boats.ID 
      ) 
    INNER JOIN River_Company on River_Company.ID = Boats.ID 
    INNER JOIN River_Section on River_Section.ID = Boats.ID 

因此,基本上,這將:

  • 最大限度的保證行數爲1.(這是一個有點髒,但事實是,如果你有一個以上的照片,多個鏈接將另行退還)

  • 如果沒有照片的,船仍然會返回

+0

如果說有5艘船,會發生什麼情況?不,它仍然只返回1行?我需要它返回所有5艘船。 – Landmine 2010-04-29 05:53:40

+0

@Tyler - 好吧,我已經更新了我的想法。如果有任何錯誤,請原諒語法錯誤。 – 2010-04-29 06:04:03

+0

它不返回任何行。肉身的sql在一些微小的修改中工作得很好。謝謝你! – Landmine 2010-04-29 06:28:07