2010-04-29 85 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