SQL Server每行返回1行

时间:2010-04-29 05:45:01

标签: sql sql-server tsql

基本上,我想要做的就是将4张桌子连在一起,每艘船返回1行。

表格布局

[船]

id, date, section, raft

[照片]

id, boatid, pthurl, purl

[River_Company]

id, sort, company, company_short

[River_Section]

id, section

就结构而言,它非常简单,但是,我有时间试图让它只返回一行。没有船会在同一天出现,唯一弄乱这一点的是照片桌。

如果你知道一个更好的方法来返回所有船只的记录表,只有照片表中的一张照片,请发布!!

所需格式

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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.(这有点脏,但事实上如果您有多张照片,否则会返回多个链接)

  • 如果没有照片,船仍然会被退回

相关问题