Как в этой ситуации писать SQL?

Комментарий к таблице содержит комментарий и ответы на него

CREATE TABLE `comment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `comment` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) 

Таблица reply_to, в которой есть response_id и comment_id оба идентификатора записей в таблице комментариев.

CREATE TABLE `reply_to` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `response_id` int(11) NOT NULL, 
  `comment_id` int(11) NOT NULL, 
  PRIMARY KEY (`id`)
)  

Если в комментарии к таблице есть такие данные:
Как в этой ситуации писать SQL?

А таблица reply_to содержит
Как в этой ситуации писать SQL?

И ожидаемый результат вроде:
Как в этой ситуации писать SQL?

Вопрос: Как я могу отобразить все комментарии и ответы на них, используя левое внешнее соединение?

Этот вопрос возник с этой страницы

Database design for comments and replies How come the sql below not working here ?

 SELECT c.comment, r.comment as reply
 FROM Comment c 
 LEFT OUTER JOIN Comment r on c.id = r.id  
 LEFT OUTER JOIN reply_to rt on rt.response_id = r.id

Добавьте тег вашей СУБД

George Menoutis 15.10.2018 16:19

Ожидаемый результат также был бы полезен.

Zack 15.10.2018 16:24

Даже лучше, чем «ожидаемый результат»: объяснение того, что средства должно быть как «response_to» 2, так и «comment_id» 1 ...

Erwin Smout 15.10.2018 16:27

Продолжать. Попробуй что-нибудь

Strawberry 15.10.2018 16:28

Это похоже на домашнее задание.

T Gray 15.10.2018 17:10
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
5
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

До сих пор не совсем понятно, как вы хотите, чтобы результаты выглядели, но исходный запрос (тот, который содержит соединения ANSI-89) из сообщения, на которое вы ссылаетесь, дает результаты, которые я ожидал:

Поэтому я переписал этот запрос, добавив правильные соединения, и он выглядит так:

SELECT
    oc.comment,
    rc.comment
FROM
    comment oc
INNER JOIN
    reply_to r
    ON r.comment_id = oc.id
INNER JOIN
    comment rc
    ON r.response_id = rc.id

Если вы хотите видеть комментарии без ответа:

тогда вы можете использовать левые внешние соединения следующим образом:

SELECT
    oc.comment,
    rc.comment
FROM
    comment oc
LEFT OUTER JOIN
    reply_to r
    ON r.comment_id = oc.id
LEFT OUTER JOIN
    comment rc
    ON r.response_id = rc.id

Другие вопросы по теме