Внутреннее объединение двух таблиц и количество объединений из третьей таблицы

cat-t спросил: 14 ноября 2017 в 06:51 в: sql

У меня есть две основные таблицы - posts и users, а также третья таблица, в которой в качестве строки хранятся избранные сообщения пользователя. Мне нужно сделать запрос к сообщению, которое объединено с пользовательскими данными, а также узнать, есть ли у текущего пользователя избранные сообщения (поиск в таблице user_favs).

В конечном итоге Я хочу вернуть клиенту что-то вроде следующего:

{
    post_id: '...',
    title: '...',
    user_id: '...',
    username: '...',
    isFavourited: isFaved > 0 ? true : false
}

Можно ли это сделать с помощью одного запроса на выборку?

CREATE TABLE posts (
    post_id    uuid,
    title      text
    author_id  uuid
);CREATE TABLE users (
    user_id   uuid,
    username  text
);CREATE TABLE user_favs (
    user_id     uuid REFERENCES users ON DELETE CASCADE,
    post_id  uuid REFERENCES posts ON DELETE CASCADE
);

Мой запрос выглядит так:

SELECT
    p.post_id,
    p.title,
    u.user_id,
    u.username,    count(f.*) as isfaved
FROM posts p
JOIN users u
ON p.author_id = u.user_id AND p.post_id = '1234'
LEFT JOIN user_favs f
ON f.user_id = p.author_id AND f.post_id = '1234'

, и я также попытался:

SELECT
    p.post_id,
    p.title,
    u.user_id,
    u.username,
FROM posts p
JOIN users u
ON p.author_id = u.user_id AND p.post_id = '1234'
LEFT JOIN 
    (SELECT count(*) FROM user_favs
) f ON f.user_id = p.author_id AND f.post_id = '1234'

РЕДАКТИРОВАТЬ: просто чтобы уточнить, на что я надеюсь для выполнения: я получаю сообщение, возвращаю соответствующего автора этого сообщения, а затем проверяю, одобрено ли сообщение запрашивающим пользователем.

0 ответов