Совокупный результат запроса

#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;