首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Server 2014中嵌套字段

在Server 2014中嵌套字段
EN

Stack Overflow用户
提问于 2020-02-24 22:44:52
回答 1查看 101关注 0票数 0

我有张桌子:

代码语言:javascript
复制
CREATE TABLE [dbo].[usecase](
    [id] [int] NULL,
    [desc] [varchar](50) NULL,
    [comm] [varchar](50) NULL,
    [catgroup] [varchar](50) NULL
) ON [PRIMARY]

GO

示例数据如下:

代码语言:javascript
复制
insert into usecase (id, [desc], comm, catgroup) values(1,'desc 1', 'comment 1', '1')
insert into usecase (id, [desc], comm, catgroup) values(2,'desc 2', 'comment 2', '1,2')
insert into usecase (id, [desc], comm, catgroup) values(3,'desc 3', 'comment 3', '1,2,3')
insert into usecase (id, [desc], comm, catgroup) values(4,'desc 4', 'comment 4', '60,61')
insert into usecase (id, [desc], comm, catgroup) values(5,'desc 5', 'comment 5', '59,60,61')
insert into usecase (id, [desc], comm, catgroup) values(6,'desc 6', 'comment 6', '9,3')

catgroup是每个用例的类别id,它是1:n关系??一个用例可能属于多个类别。

在上述示例数据中,类别1有3个用例(1,2,3),类别2有2个用例(2,3),类别3有2个用例(3,6)等等。

我正在寻找的是一个基于类别id的查询,并返回属于这个给定类别id的所有用例。

数据库为Server 2014。

EN

回答 1

Stack Overflow用户

发布于 2020-02-24 23:45:02

正如最初的注释已经指出的那样,最好的解决方案是将数据规范化,这样您就拥有了一个像usecase_categories (usecase_id, category_id)这样的表,这样任何字段都不能容纳多个数据,但是如果您由于某种原因无法更改数据结构,那么这种笨拙的情况可能会起作用:

代码语言:javascript
复制
WHERE catgroup = '5'  -- Is the only category
   OR catgroup LIKE '5,%' -- Is the first category
   OR catgroup LIKE '%,5' -- Is the last category
   OR catgroup LIKE '%,5,%' -- Is somewhere in the middle of the list

在这种情况下,正在寻找“类别5”,您可以进一步修改它,使其更加灵活.

代码语言:javascript
复制
WHERE catgroup = '5' 
   OR catgroup LIKE CAST(somecategoryid AS VARCHAR) + ',%'
   OR catgroup LIKE '%,' + CAST(somecategoryid AS VARCHAR)
   OR catgroup LIKE '%,' + CAST(somecategoryid AS VARCHAR) + ',%'

可能也有一种使用正则表达式的方法,但实际上,您应该修复表的设计。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60385017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档