zoukankan      html  css  js  c++  java
  • 【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

    效果:

  • 相关阅读:
    web&http协议&django初识
    jQuery
    BOM&DOM
    装饰器
    JavaScript
    模块
    面向对象编程
    函数
    CSS
    HTML
  • 原文地址:https://www.cnblogs.com/TurboWay/p/9360775.html
Copyright © 2011-2022 走看看