Объединение двух строк в одной таблице с одной строкой во второй таблице

#sql #select #join

#sql #выберите #Присоединиться

Вопрос:

У меня есть две таблицы — report и bouydata

 report
------
id  sun
1   overcast

bouydata
----------
reportid  bouy   winddir
1         46026  340
1         46027  345
  

Я хочу выделить все 3 строки в одну строку. Вот мой запрос:

   SELECT report.id, sun, bouy1.bouy as bouy1, bouy1.winddir as winddir1, bouy2.bouy as bouy2, bouy2.winddir as winddir2
    FROM report 
    LEFT JOIN bouydata bouy1 
    ON report.id = bouy1.reportid 
    LEFT JOIN bouydata bouy2 
    ON report.id = bouy2.reportid
  

По какой-то причине я возвращаю четыре строки:

 1   Slightly Overcast   46026   340 46026   340
1   Slightly Overcast   46026   340 46027   345
1   Slightly Overcast   46027   345 46026   340
1   Slightly Overcast   46027   345 46027   345
  

Это не выбор только уникальных строк и объединение их в одну строку. Кто-нибудь может помочь мне получить желаемый результат:

 1   Slightly Overcast   46026   340 46027   345
  

Комментарии:

1. Почему вы объединяетесь bouydata дважды?

2. смотрите мой комментарий к ответу Марка

Ответ №1:

Я не знаю, почему вы выполняете двойное объединение с теми же таблицами и теми же условиями. Это просто дублирует информацию.

 SELECT report.id, sun, bouy, winddir
FROM report 
LEFT JOIN bouydata
ON report.id = bouydata.reportid 
  

дало бы вам:

 report.id   sun       bouy   winddir
1           overcast  46026  340
1           overcast  46027  345
  

Комментарии:

1. Потому что я хочу, чтобы только 1 строка с обеими строками из bouydata была объединена в строку из отчета.

2. на самом деле я собираюсь разбить его на два отдельных запроса. Если бы я сделал это таким образом, мой запрос был бы чрезвычайно длинным (учитывая, что у меня на самом деле есть 3 bouys для каждого отчета, и каждая строка bouydata содержит 6 столбцов, а каждая строка отчета содержит 8 столбцов, так что это был бы запрос на 32 столбца). Мне все еще любопытно, как решить проблему. спасибо за вашу помощь