SQL按字母顺序对具有多对多关系的记录进行排序

SQL按字母顺序对具有多对多关系的记录进行排序,sql,sql-server,oracle,sorting,many-to-many,Sql,Sql Server,Oracle,Sorting,Many To Many,我有以下db表:注释和标记和注释。它们之间存在多对多关系,实际上单个注释可以有多个标记,单个标记可以用于多个注释。让我们想象一下: COMMENT --------------- ID TEXT 1 comment1 2 comment2 3 comment3 4 comment4 TAG --------------- ID NAME 1 bb 2 cc 3 ca 4 aa

我有以下db表:注释标记注释。它们之间存在多对多关系,实际上单个注释可以有多个标记,单个标记可以用于多个注释。让我们想象一下:

COMMENT
---------------
ID      TEXT
1       comment1
2       comment2
3       comment3
4       comment4


TAG
---------------
ID      NAME
1       bb
2       cc
3       ca
4       aa
5       ac
6       bd


COMMENT_TAG
---------------
ID_COMMENT      ID_TAG
1               1
1               2
1               3
1               4
2               1
2               3
3               3
3               4
3               5
3               6
4               1
4               2
4               3
4               4
4               5
4               6
因此,FE侧显示了以下数据

Comment     Tags
==================================
comment1    bb, cc, ca, aa
comment2    bb, ca
comment3    ca, aa, ac, bd
comment4    bb, cc ,ca, aa, ac, bd
我想按以下方式进行分类:

1按字母顺序对每个注释的标签进行排序:

Comment     Tags
==================================
comment1    aa, bb, ca, cc
comment2    bb, ca
comment3    aa, ac, bd, ca
comment4    aa, ac, bb, bd, ca, cc
Comment     Tags
==================================
comment4    aa, ac, bb, bd, ca, cc
comment3    aa, ac, bd, ca
comment1    aa, bb, ca, cc
comment2    bb, ca
2按标签按字母顺序对注释排序:

Comment     Tags
==================================
comment1    aa, bb, ca, cc
comment2    bb, ca
comment3    aa, ac, bd, ca
comment4    aa, ac, bb, bd, ca, cc
Comment     Tags
==================================
comment4    aa, ac, bb, bd, ca, cc
comment3    aa, ac, bd, ca
comment1    aa, bb, ca, cc
comment2    bb, ca

您能告诉我们如何使用SQL实现这一点吗?或者告诉我们如何为这种用例排序?

加入表格并按注释分组。
然后使用类似于Oracle11g+的函数连接每个注释的所有标记:

select c.text, listagg(t.name, ',') within group (order by t.name) tags
from "COMMENT" c
left join COMMENT_TAG ct on ct.id_comment = c.id
left join TAG t on t.id = ct.id_tag
group by c.id, c.text
为每种情况添加
ORDER BY
子句:

order by c.text
或:


请参阅。

通过注释连接表格和分组。
然后使用类似于Oracle11g+的函数连接每个注释的所有标记:

select c.text, listagg(t.name, ',') within group (order by t.name) tags
from "COMMENT" c
left join COMMENT_TAG ct on ct.id_comment = c.id
left join TAG t on t.id = ct.id_tag
group by c.id, c.text
为每种情况添加
ORDER BY
子句:

order by c.text
或:


请参阅。

用您使用的数据库标记问题。@forpas抱歉忘记了这一点。我刚刚添加了标签SQL Server与Oracle不同。事实上,您不仅必须标记您使用的数据库,还必须标记其版本。请用您使用的数据库标记问题。@forpas抱歉,我忘了这一点。我刚刚添加了标签SQL Server与Oracle不同。事实上,您不仅必须标记所使用的数据库,还必须标记其版本。