我目前有两个用于存储实体之间关系的表,如下所示:
Entity_Table:包含实体的名称和类型(master或secondary)
ENTITY_ID | ENTITY_NAME | ENTITY_TYPE
-----------------------------------------
1 | 'entity_1' | 'master'
2 | 'entity_2' | 'secondary'
3 | 'entity_3' | 'secondary'
...
链接表:包含实体之间的关系信息
MASTER_ID | SECONDARY_ID
--------------------------
1 | 2
1 | 3
...
其他信息:
我正在寻找的内容:该查询将以这种格式返回所有实体及其链接的实体:
ENTITY_ID | ENTITY_TYPE | ENTITY_LINKS
------------------------------------------
1 | 'master' | 2,3
2 | 'secondary' | 1
3 | 'secondary' | 1
...
我尝试使用COALESCE
和JOIN
收效甚微,关于如何实现这一点的任何想法?
链接列必须为“类似于csv”的格式,因此后面的c ++代码可以直接使用它,而无需大量的for循环或每个实体只有一个查询,这会大大降低速度。
如果您知道如何将其放入视图,视图也很好:)
谢谢!
我认为这将为您提供所需的服务。这使用需要SQL Server 2017或更高版本的string_agg
。如果您使用的是SQL Server的旧版本,则可以使用stuff
和for xml path
(这就是我上面哈里所说的)。
select e.entity_id, e.entity_type, string_agg(l.secondary_id, ',') as data
from entity_table e
inner join links l on l.master_id = e.entity_id
group by e.entity_id, e.entity_type
union
select e.entity_id, e.entity_type, string_agg(l.master_id, ',') as data
from entity_table e
inner join links l on l.secondary_id = e.entity_id
group by e.entity_id, e.entity_type