Sql 如何从不同列中选择多个整数数据并将其合并到整数数组的单个列中
我的POSTGRES数据库中有如下表 表名:userDetailsSql 如何从不同列中选择多个整数数据并将其合并到整数数组的单个列中,sql,postgresql,postgresql-9.3,Sql,Postgresql,Postgresql 9.3,我的POSTGRES数据库中有如下表 表名:userDetails column 1: userId (Bigint) column 2: questionId1 (int) Foreign key:: userQuestions(id) column 3: answer1 (String) column 4: questionId2 (int) Foreign key:: userQuestions(id) | column 5: answer2 (String) |user
column 1: userId (Bigint)
column 2: questionId1 (int) Foreign key:: userQuestions(id)
column 3: answer1 (String)
column 4: questionId2 (int) Foreign key:: userQuestions(id) |
column 5: answer2 (String)
|userId |questionId1 |answer1 |questionId2 |answer2
abc 1 "hp" 2 "tommy"
表名:userQuestions
column 1: id(bigint)
column 2: question(String)
id question
1 "What is brand name of your laptop?"
2 "What is name of your pet?"
我想根据userId选择如下输出:
column 1: userId (Bigint)
column 2: questionId's (int [])(questionId1 and questionId2)
column 3: questions (String [])( array of questions from table userQuestions against the the questionId1 and questionId2 )
column 4: answer(String []) (answer1 and answer2 from userDetails table in array of String)
请帮我写sql查询
样本数据
Tablename::userDetails
column 1: userId (Bigint)
column 2: questionId1 (int) Foreign key:: userQuestions(id)
column 3: answer1 (String)
column 4: questionId2 (int) Foreign key:: userQuestions(id) |
column 5: answer2 (String)
|userId |questionId1 |answer1 |questionId2 |answer2
abc 1 "hp" 2 "tommy"
Tablename::userQuestions
column 1: id(bigint)
column 2: question(String)
id question
1 "What is brand name of your laptop?"
2 "What is name of your pet?"
预期输出::
userId questionIds answers questions
abcd [1,2] ["hp","tommy"] ["What is brand
name of your
laptop?",
"What is name of
your pet?"]
我认为唯一的方法是在一个临时表中插入输出,这样您可以插入带有问题字符串和答案1的questionId1,然后将带有问题字符串和答案2的questionId2插入到相同的列中,然后显示结果 编辑: 正如您所要求的,这里有一个在SQL Server中工作的示例,我不知道POSTGRES的情况,从来没有使用过它
Select t1.userId, t1.questionId1 as questionId, (Select t2.question from userQuestions t2 where t2.id = t1.questionId1) as questions, answer1 as answer into #TempTable from userDetails
UNION ALL Select t1.userId, t1.questionId2 as questionId, (Select t2.question from userQuestions t2 where t2.id = t1.questionId2) as questions, answer2 as answer into #TempTable from userDetails
Select * from #TempTable
不要忘记,在重新执行代码之前,必须使用droptabletable删除临时表
我在SQL Server 2016上尝试了一个类似的代码,它运行得很好。我会换一种说法
select d.userid, d.questionid1 || ',' || d.questionid2, d.answer1 || ' ' || d.answer2,
string_agg(q.question,',')
from userDetails d
join userQuestions q on q.id = d.questionid1 or q.id = d.questionid2
GROUP BY d.userid
@Tonner Maan因为我是sql新手,你能为我分享sql查询吗it@BZT下面是SQL Server中的一个示例,不确定postgresql是否使用相同的查询,但您可以根据需要进行编辑以实现目标,希望它能帮助示例数据和期望的结果真的会有帮助。@Gordon我已经编辑了我的问题,并添加了一些示例数据和期望的输出,您能帮助我编写相应的sql查询吗。您的数据结构有问题。UserQuestions似乎与用户没有联系。我期待一个连接表,每个用户和每个问题有一行。是的,他们的关系是@Gordon,表userDetails中的questionId1和questionId2列在表userQuestions的列id上有外键,我在上面提到过,这一个在@Tito谢谢你,它只需要在最后使用“按d.userid分组”