【SQLSERVER】处理一对多标签的语法糖

时间:2023-03-10 06:09:22
【SQLSERVER】处理一对多标签的语法糖

数据库表设计的时候,经常会出现一对多的情况,比如标签、明细之类的。

有时,需要在一个查询中,将每个主体的所有标签在一个字段中展示出来,这个时候就可以用 FOR XML PATH 这个语法轻易的实现。

示例代码:

-- 人物
CREATE TABLE man(
id INT NOT NULL DEFAULT 0,
name NVARCHAR(50) NOT NULL DEFAULT ''
)
INSERT INTO man(id,name)
VALUES(1,'肥仔'),(2,'阿呆'),(3,'小新') --人物-标签
CREATE TABLE man_ontag(
id INT NOT NULL DEFAULT 0,
tag NVARCHAR(50) NOT NULL DEFAULT ''
)
INSERT INTO man_ontag(id,tag)
VALUES(1,'帅气'),(1,'搞笑'),(1,'幽默'),(2,'帅气'),(2,'搞笑'),(3,'帅气') SELECT * FROM man
SELECT * FROM man_ontag SELECT a.id,
a.name,
STUFF((SELECT '、'+ tg.tag FROM dbo.man_ontag tg WHERE a.id= tg.id FOR XML PATH('')),1,1,'') AS tags,
STUFF((SELECT ' | '+ tg.tag FROM dbo.man_ontag tg WHERE a.id= tg.id FOR XML PATH('')),1,3,'') AS tags2
FROM man a DROP TABLE man
DROP TABLE man_ontag

效果:

【SQLSERVER】处理一对多标签的语法糖