如何在SQL中编写这样复杂的关系?

时间:2014-04-11 13:53:17

标签: sql postgresql

如果有一个表r(c,s)和这样的关系(c表示类,s表示学生),我想知道所有可能的组合c1,c2,.. c5,s1,... s8 ,如何编写SQL子句?我试着用case来写它,但它太慢了。我正在使用PostgreSQl。

c1:s1,s5,s7
c2:s1,s2,s3,s4
c3:s2,s6,s8
c4:s4,s5,s6
c5:s3,s7,s8

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT c, string_agg(s, ',')
FROM r
GROUP BY c;

注意:string_agg()是在PostgreSQL 9.0中引入的。

答案 1 :(得分:0)

您要将行交换到表r(c,s)列吗? 如果需要,可以将此SQL用于exp:

digoal=# select split_part(val,':',1), regexp_split_to_table(split_part(val,':',2), ',') from (values ('c1:s1,s5,s7'),('c2:s1,s2,s3,s4')) as t(val);
 split_part | regexp_split_to_table 
------------+-----------------------
 c1         | s1
 c1         | s5
 c1         | s7
 c2         | s1
 c2         | s2
 c2         | s3
 c2         | s4
(7 rows)