【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
效果: