问题是这样,需要用到Tag标签。
想了两个办法。
1.直接存取。
在表里多加一列,字符串类型。
例如“拉面,红烧面,方便面”
用,号分割
2.关联Tag表
存取关联Tag表的ID
方案1倒是蛮好解决,搜索Tag时直接用Like去匹配数据。
方案2的话,某条记录有多个Tag标签该怎么匹配Tag关联表的文字描述信息呢?
如下:
A表(记录表)
ID Tag
-----------
1 1,2,3
2 1,3
3 2,3
B表(Tag关联表)
ID 描述
-------------
1 拉面
2 方便面
3 牛肉面
想要的结果
ID Tag TagName
-------------------
1 1,2,3 拉面,方便面,牛肉面
2 1,3 拉面,牛肉面
3 2,3 方便面,牛肉面
谢谢帮忙的兄弟姐妹。
------解决方案--------------------
- SQL code
--A表(记录表)DECLARE @A TABLE(id INT,Tag VARCHAR(10))--ID Tag-----------INSERT INTO @ASELECT 1, '1,2,3' UNION ALLSELECT 2, '1,3' UNION ALLSELECT 3, '2,3'DECLARE @B TABLE(id INT,描述 VARCHAR(10))-------------INSERT INTO @BSELECT 1, '拉面' UNION ALLSELECT 2, '方便面' UNION ALLSELECT 3, '牛肉面' SELECT a.id,a.Tag,TagName=STUFF((SELECT ','+描述 FROM @B WHERE CHARINDEX(','+CAST(id AS VARCHAR(4))+',',','+a.Tag+',' )>0 FOR XML PATH('')),1,1,'')FROM @A aGROUP BY a.id,Tag/*id Tag TagName----------- ---------- -------------------------1 1,2,3 拉面,方便面,牛肉面2 1,3 拉面,牛肉面3 2,3 方便面,牛肉面(3 行受影响)*/
------解决方案--------------------
- SQL code
--> 测试数据:[A表]if object_id('[A表]') is not null drop table [A表]create table [A表]([ID] int,[Tag] varchar(5))goinsert [A表]select 1,'1,2,3' union allselect 2,'1,3' union allselect 3,'2,3'go--> 测试数据:[B表]if object_id('[B表]') is not null drop table [B表]create table [B表]([ID] int,[描述] varchar(6))goinsert [B表]select 1,'拉面' union allselect 2,'方便面' union allselect 3,'牛肉面'go;with tas(select a.*,b.描述from [A表] a,[B表] b where CHARINDEX(LTRIM(b.[ID]),a.Tag)>0)SELECT *FROM (SELECT DISTINCT Id,Tag FROM t)AOUTER APPLY( SELECT [描述]= STUFF(REPLACE(REPLACE( ( SELECT [描述] FROM t N WHERE id = A.id and Tag=a.Tag FOR XML AUTO ), '<b 描述="', ','), '"/>', ''), 1, 1, ''))N/*Id Tag 描述---------------------------------1 1,2,3 拉面,方便面,牛肉面2 1,3 拉面,牛肉面3 2,3 方便面,牛肉面*/