#sql #postgresql #knex.js
#sql #postgresql #knex.js
Вопрос:
Я новичок в PG, и у меня возникли проблемы с правильным синтаксисом этого запроса. Я продолжаю получать ERROR: missing FROM-clause entry for table "post_reactions"
. Я уверен, что это глупый недосмотр.
Я пытаюсь создать ваш типичный список сообщений с:
- все столбцы и все строки из
posts
таблицы, где users.id = «как угодно» - все реакции post из
post_reactions
таблицы, в которой posts.id = пост_реакции.post_id - ключевые слова реакции («счастливый», «грустный» и т. Д.) Из
reactions
таблицы, В которой reaction.id = post_reactions.идентификатор реакции_id - имя отображения из
users
таблицы, связанной с каждой реакцией post, путем сопоставления post_reaction.user_id с users.id и возвращает users.disaplay_name из таблицы users.
SELECT
post_reactions.post_id,
post_reactions.reaction_id,
post_reactions.user_id,
posts.content,
posts.content,
posts.create_timestamp,
posts.id,
posts.image_url,
posts.updated_at,
reactions.id,
reactions.keyword,
users.display_name,
users.id
FROM public.posts
LEFT OUTER JOIN users ON (users.id = post_reactions.user_id)
LEFT OUTER JOIN post_reactions ON (posts.id = post_reactions.post_id)
LEFT OUTER JOIN reactions ON (reactions.id = post_reactions.reaction_id)
WHERE users.id = 'foobar'
;
Ответ №1:
Таблицы должны быть включены в FROM
предложение, прежде чем на них можно будет ссылаться в ON
:
FROM public.posts LEFT JOIN
post_reactions
ON posts.id = post_reactions.post_id LEFT JOIN
reactions
ON reactions.id = post_reactions.reaction_id LEFT JOIN
users
ON users.id = post_reactions.user_id
Я бы также посоветовал вам использовать псевдонимы таблиц, чтобы запрос было легче писать и читать:
FROM public.posts p LEFT JOIN
post_reactions pr
ON p.id = pr.post_id LEFT JOIN
reactions r
ON r.id = pr.reaction_id LEFT JOIN
users u
ON u.id = pr.user_id
Псевдонимы, однако, должны использоваться на протяжении всего запроса.