Как объединить результат запроса в другую таблицу (добавить столбец) - PullRequest
1 голос
/ 07 января 2020

Редактировать

У меня есть две таблицы: etape и etapex.

enter image description here

enter image description here

Мне нужно найти максимум idProjet для каждого idEtape (в таблице etapex), и там связать idEtape и idProjet с 'nomEtape and livrable` из таблицы etape.

Поэтому я попробовал две разные вещи:

SELECT etapexprojet.idEtape, idProjet, nometape, livrable
FROM etape, etapexprojet
WHERE etapexprojet.idetape = (SELECT MAX(etape.idetape) FROM etapexprojet )

К сожалению, вот что я получаю:

enter image description here

Вот мое другое «решение»:

Первый шаг - найти максимальное значение (я не хочу использовать group by):

SELECT EX.idEtape
FROM etapexprojet EX                   
LEFT JOIN etapexprojet EX2       
  ON EX.idprojet = EX2.idprojet 
  AND EX.idetape < EX2.idetape
WHERE EX2.idetape IS NULL

Но теперь я застрял, и я не понимаю, как соединить то, что я получаю от первого запроса к табличному этапу.

В конце это должно дать мне что-то вроде:

enter image description here

Но с колонками nomEtape и livrable также ...

Заранее спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 07 января 2020

Вы можете просто JOIN таблица etape к результатам вашего первого запроса:

SELECT EX.idProjet, E.*
FROM etape E
JOIN etapexprojet EX ON EX.idEtape = E.idEtape              
LEFT JOIN etapexprojet EX2       
  ON EX.idprojet = EX2.idprojet 
  AND EX.idetape < EX2.idetape
WHERE EX2.idetape IS NULL
ORDER BY idProjet

Демонстрация по SQLFiddle

1 голос
/ 07 января 2020

Попробуйте это:

SELECT ET.idEtape, ETX.idProjet, ET.nomEtape, ET.livrable
FROM etape  ET               
LEFT JOIN etapexprojet ETX ON ET.idEtape = ETX.idEtape 
WHERE ETX.idEtape = (SELECT MAX(idEtape) FROM etapexprojet WHERE idProjet = ETX.idProjet);
1 голос
/ 07 января 2020

Существуют различные решения этой проблемы "наибольшие числа групп".

Один простой способ - начать с этого агрегированного запроса, который дает вам максимум idEtape на IdProjet:

select idProjet, max(idEtape) idEtape from etapex group by idProjet

Тогда вы можете просто объединить это с оригинальной таблицей:

select e.*, p.idProjet
from etape e
inner join (
    select idProjet, max(idEtape) idEtape from etapex group by idProjet
) p on p.idEtape = e.idEtape
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...