У меня 3 таблицы говорят tab1, tab2 and tab3
.Теперь у tab1 есть уникальный ключ, скажем idKey
.В tab2 есть несколько столбцов idKey, Ques
.В tab3 есть столбцы idKey, Ans
.здесь tab2 и tab3 имеют некоторые вопросы и ответы (где-то между 1 и 5), соответствующие idKey в tab1.пример данных:
tab1:
idKey:
1
2
tab2:
idkey Ques
1 q11
1 q12
2 q21
2 q22
2 q23
tab3:
idKey Ans
1 a11
1 a12
2 a21
2 a22
2 a23
Теперь я хочу получить все данные таким образом, чтобы при получении я получал только 2 строки в ответ с idKey, array (Ques), array (Ans).что-то вроде этого:
select a.idKey,array_agg(b.Ques),array_agg(c.Ans) from tab1 a, tab2 b, tab 3
требуемый вывод:
idKey Ques Ans
1 [q11,q12] [a11,a12]
2 [q21,q22,q23] [a21,a22,a23]
теперь я хочу, чтобы этот вопрос и данные в json были примерно такими:
select idKey,array_agg(row_to_json(Ques, Ans)) as QuesAns from tab1, tab2, tab3.
, чтобы яможно получить в виде:
idKey QuesAns
1 [{"Ques":"q11", "Ans":"a11"},{"Ques":"q12","Ans":"a12"}]
2 [{"Ques":"q21", "Ans":"a21"},{"Ques":"q22", "Ans":"a22"},{"Ques":"q23", "Ans":"a23"}]
Как я могу это сделать?
РЕДАКТИРОВАТЬ
Я забыл добавить последовательность.поэтому tab2 и tab3 также имеют другой столбец для последовательности скажем seq
и значения:
tab2:
idkey seq Ques
1 1 q11
1 2 q12
2 1 q21
2 2 q22
2 3 q23
tab3:
idKey seq Ans
1 1 a11
1 2 a12
2 1 a21
2 2 a22
2 3 a23
, поэтому теперь запрос должен выглядеть так:
select idKey,array_agg(row_to_json(Ques, Ans)) as QuesAns from tab1 a, tab2 b, tab3 c where b.seq=c.seq
ожидаемый результат такой же, как указано выше.