Столбец объединения, возвращаемый внутренним объединением в sql - PullRequest
0 голосов
/ 12 марта 2020

У меня есть две таблицы интересов и сабинта, я хочу получить данные, относящиеся к каждой области интересов, поэтому я попробовал внутреннее объединение select interest,subinterest from interest inner join subint on subint.interest_id = interest.id;, и в результате получается

"interest"  "subinterest"
"foodie"    "tea"
"foodie"    "biryani"
"foodie"    "chocolate"
"foodie"    "cookies"
"foodie"    "fast-food"
"cooking"   "cooking"

Есть ли способ отформатировать вывод и сделать это как

"interest"  "subinterest"
"foodie"    "tea"
            "biryani"
            "chocolate"
            "cookies"
            "fast-food"
"cooking"   "cooking"

это возможно с помощью любого SQL запроса? или мне нужно сделать это путем кодирования. Я хочу этого, потому что я создаю API с использованием node и knex. js и хочу, чтобы JSON был хорошо отформатирован

{
        "interest": "foodie",
        "subinterest": "coffee",
        "subinterest": "tea",
        "subinterest": "biryani"
}

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Создайте JSON вы хотите в Postgres. Это дает вам JSON запись на строку , что, как я думаю, вам нужно:

select row_to_json(i)
from (select interest, array_agg(subinterest) as subinterests
      from t
      group by interest
     ) i;

Здесь - это дб <> скрипка.

0 голосов
/ 12 марта 2020

Вы должны попытаться построить объект или структуру массива следующим образом:

arr=[{interest:"foodie",
      subinterest:["tea","biryani","chocolate",
                   "cookies","fast-food"]},    
     {interest:"cooking",
      subinterest:["cooking"]}];

вне SQL, используя некоторый серверный код, такой как PHP, и затем передать его через JSON строка для "безопасного потребления" вашим скриптом knex. js.

(Приведенный выше код отображает результирующий массив Javascript после анализа JSON.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...