SQL Server возвращает 1 строку на лодку - PullRequest
1 голос
/ 29 апреля 2010

По сути, я хочу объединить 4 таблицы и вернуть по 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

Ответы [ 2 ]

4 голосов
/ 29 апреля 2010

Это в основном, как работают объединения. Поскольку boats и photos находятся в отношениях один-ко-многим и вы хотите запрос один-к-одному , вам необходимо явно выразить его с помощью предиката. Например:

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 голос
/ 29 апреля 2010

Предполагая, что ваш столбец 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. (Это немного грязно, но факт, что если у вас более одной фотографии, в противном случае будет возвращено более одной ссылки)

  • Если фотографий нет, лодка все равно будет возвращена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...