Вывод своего столбца, который включает связанные данные из другой таблицы
Я новичок в SQL, поэтому просьба не судить строго. Пробовал нагуглить решение моего вопроса, но не смог найти нужного ответа. Есть две таблицы authors и books
CREATE TABLE authors (
id uuid PRIMARY KEY,
name text
)
CREATE TABLE books (
id uuid PRIMARY KEY,
title text,
author_id uuid REFERENCES authors(id)
)
Требуется получить данные в таком формате. Каким запросом это можно сделать?
{
id: 'some book id',
title: 'Romeo and Juliet'
author_id: 'some author id',
author: {
id: 'some author id',
name: 'William Shakespeare'
}
}
Ближайший результат, который удавалось получить был таким
{
id: 'some book id',
title: 'Romeo and Juliet'
author_id: 'some author id',
id: 'some author id',
name: 'William Shakespeare'
author: {
id: 'some author id',
name: 'William Shakespeare'
}
}
При использовании такого запроса
SELECT *, row_to_json(authors) AS author
FROM books
JOIN authors ON books.author_id = authors.id
Ответы (1 шт):
Автор решения: Superproger77
→ Ссылка
SELECT books, row_to_json(authors) AS author
FROM books INNER JOIN authors ON books.author_id = authors.id;
SELECT * — это плохая практика, потому что она может привести к ряду проблем:
- Медленная производительность: использование SELECT * может замедлить выполнение запроса, так как он выбирает все столбцы из всех таблиц, даже если нужны только некоторые столбцы.
- Неконтролируемый результат: при использовании SELECT * невозможно контролировать, какие столбцы будут выбраны, что может привести к неожиданным результатам.
- Уязвимость к атакам с использованием SQL-инъекций: использование SELECT * делает приложение уязвимым к атакам с использованием SQL-инъекций, так как злоумышленник может вставить вредоносный код в запрос.
- Трудности в обслуживании: при использовании SELECT * может быть сложно поддерживать и обновлять код, так как изменения в структуре базы данных могут повлиять на запросы.
Рекомендуется использовать явное указание столбцов в запросе, чтобы повысить производительность, контролировать результат и обеспечить безопасность приложения.