Я использую Postgresql. У меня есть 2 стола. сообщения и комментарии . Таблица сообщений содержит столбец message , id , creation_at . Таблица комментариев содержит комментарий , main_message_id , id столбец.
Я сохраняю данные следующим образом: ТАБЛИЦА СООБЩЕНИЙ:
- сообщение: «Тест»; id: 1; create_at: 2020.01.01;
ТАБЛИЦА КОММЕНТАРИЙ:
Я хотел бы создать запрос, который возвращает мне результат без дублирования содержимого MESSAGE TABLE.
Я пытался это:
SELECT
messages.message,
messages.id,
messages.created_at,
comments.comment,
comments.main_message_id,
comments.id
FROM
messages
LEFT OUTER JOIN LATERAL
(
SELECT
comments.comment
FROM
comments
WHERE
comments.main_message_id = message.id
)
ON TRUE
ORDER BY
messages.created_at DESC
Мой результат выглядит следующим образом:
+---------+-----+------------+---------------------+-----------------+----+
| message | id | created_at | comment | main_message_id | id |
+---------+-----+------------+---------------------+-----------------+----+
| Test | 1 | 2020.01.01 | Comment For Test 1 | 1 | 1 |
| Test | 1 | 2020.01.01 | Comment For Test 2 | 1 | 2 |
+---------+-----+------------+---------------------+-----------------+----+
Так что это дублирует сообщения ...
То, что я хочу, выглядит так: ( Без дублирования строки таблицы сообщений.)
+---------+-----+------------+---------------------+-----------------+----+
| message | id | created_at | comment | main_message_id | id |
+---------+-----+------------+---------------------+-----------------+----+
| Test | 1 | 2020.01.01 | Comment For Test 1 | 1 | 1 |
| | | | Comment For Test 2 | 1 | 2 |
+---------+-----+------------+---------------------+-----------------+----+