#database #postgresql #knex.js
Вопрос:
У меня есть две таблицы, вторая таблица содержит внешний ключ, который ссылается на первичный ключ первой таблицы.
Первая таблица «Дома» (идентификатор,название,город,страна), Вторая таблица «Изображения» (идентификатор,имя,идентификатор дома)
Я выполняю следующий запрос:
SELECT * FROM houses INNER JOIN images ON houses.id = images.house_id;
Результатом является массив повторяющихся данных, за исключением имени поля:
[ { id:1, title: "house1", city:"c1", country:"country2", name:"image1", house_id: 2 }, { id:2, title: "house1", city:"c1", country:"country2", name:"image2", house_id: 2 }, { id:3, title: "house1", city:"c1", country:"country2", name:"image3" house_id: 2, }, ]
Как я мог бы настроить запрос, чтобы получить следующий результат:
[ { id:2, title: "house1", city:"c1", country:"country2", imagesNames:["image1","image2","image3"] house_id: 2, } ]
Выполнимо ли это с помощью knex? Я использую базу данных PostgreSQL.
Комментарии:
1. Странно, что
id
в результате все меняется.
Ответ №1:
GROUP BY
все столбцы, общие для всех одноранговых узлов, и агрегированные имена. Нравится:
SELECT h.id, h.title, h.city, h.country , array_agg(name) AS images_names , i.house_id -- redundant? FROM houses h JOIN images i ON h.id = i.house_id; GROUP BY h.id, h.title, h.city, h.country, i.house_id;