select возвращает ноль строк, хотя должен возвращать некоторые записи - PullRequest
0 голосов
/ 17 марта 2019

У меня есть база данных postgres, представляющая простой демонстрационный форум.Существуют две таблицы с именами

topic

id   | topic_id (the parent topic) | name | description
-------------------------------------------------------
uuid | uuid                        | text | text

и thread

id   | topic_id | name | created_at
-------------------------------------------------------
uuid | uuid     | text | timestamp without timezone

При использовании Express REST APIЯ хочу получить всю информацию по одной теме.Я передаю его ID и хотел бы получить такой результат

{
    parentTopic: {}, // could be null if no parent is available
    name: "",
    description: "",
    childTopics: [{}, {}, {}],
    threads: [{}, {}, {}] // should be sorted by created_at
}

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

SELECT
    currentTopic.name,
    currentTopic.description,
    parentTopic.id AS parentTopicId,
    parentTopic.name AS parentTopicName,
    parentTopic.description AS parentTopicDescription,
    childTopic.id AS childTopicId,
    childTopic.name AS childTopicName,
    childTopic.description AS childTopicDescription,
    linkedThread.id AS threadId,
    linkedThread.name AS threadName,
    linkedThread.created_at AS threadCreatedAt
FROM
    topic currentTopic
INNER JOIN
    topic parentTopic ON currentTopic.topic_id = parentTopic.id
INNER JOIN
    topic childTopic ON currentTopic.id = childTopic.topic_id
INNER JOIN
    thread linkedThread ON currentTopic.id = linkedThread.topic_id
WHERE
    currentTopic.id = '624aaab6-2d2d-45dc-a425-c2863f05779c'
ORDER BY
    linkedThread.created_at;

При выполнении этого (я использую pgAdmin), я не вижу никакой ошибки, но я получаю 0 возвращенных строк,Я убедился, что должны быть какие-то записи для извлечения.

Что-то не так с этим запросом?Есть ли способ улучшить запрос, чтобы он возвращал мне готовый к использованию результат (объект JS, о котором я упоминал выше)?

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

Вот некоторые тестовые данные для потоков иТемы

Таблица тем:

enter image description here

Таблица тем:

enter image description here

1 Ответ

1 голос
/ 17 марта 2019

изменить внутреннее соединение на левое соединение

SELECT
    currentTopic.name,
    currentTopic.description,
    parentTopic.id AS parentTopicId,
    parentTopic.name AS parentTopicName,
    parentTopic.description AS parentTopicDescription,
    childTopic.id AS childTopicId,
    childTopic.name AS childTopicName,
    childTopic.description AS childTopicDescription,
    linkedThread.id AS threadId,
    linkedThread.name AS threadName,
    linkedThread.created_at AS threadCreatedAt
FROM
    topic currentTopic
left JOIN
    topic parentTopic ON currentTopic.topic_id = parentTopic.id
left JOIN
    topic childTopic ON currentTopic.id = childTopic.topic_id
left JOIN
    thread linkedThread ON currentTopic.id = linkedThread.topic_id
WHERE
    currentTopic.id = '624aaab6-2d2d-45dc-a425-c2863f05779c'
ORDER BY
    linkedThread.created_at;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...