首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询以选择类别树/路径位于varchar列中的唯一子类别。

查询以选择类别树/路径位于varchar列中的唯一子类别。
EN

Stack Overflow用户
提问于 2015-08-15 14:00:34
回答 4查看 98关注 0票数 1

如果我有一个具有colum类别中指定的类别树的表,这是varchar。字符"-“充当类别父-子关系分隔符,但它是字符串的一部分,如下所示(为说明目的简化):

代码语言:javascript
复制
categoryid    category
----------    --------
    1         Colors
    2         Colors-Red
    3         Colors-Red-Bright
    4         Colors-Red-Medium
    5         Colors-Red-Dark
    6         Colors-Red-Dark-saturated
    7         Colors-Red-Dark-unsaturated
    8         Temperatures     
    9         Temperatures-cold
    10        Temperatures-cold-freezing
    11        Temperatures-cold-mild
    12        Temperatures-hot
    13        Temperatures-hot-burning
    14        Temperatures-hot-burning-1st degree
    15        Temperatures-hot-burning-2nd degree

我需要一个查询,它只返回那些没有任何现有“子”类别的类别。因此,此查询只应返回:

代码语言:javascript
复制
categoryid    category
----------    --------
    3         Colors-Red-Bright
    4         Colors-Red-Medium
    6         Colors-Red-Dark-saturated
    7         Colors-Red-Dark-unsaturated
    10        Temperatures-cold-freezing
    11        Temperatures-cold-mild
    14        Temperatures-hot-burning-1st degree
    15        Temperatures-hot-burning-2nd degree

有什么办法做到这一点吗?非常感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-15 14:03:52

以下是一种方法:

代码语言:javascript
复制
select c.*
from categories c
where not exists (select 1
                  from categories c2
                  where c2.category like concat(c.category, '-%')
                 );
票数 4
EN

Stack Overflow用户

发布于 2015-08-15 14:08:20

你可以这样做:

代码语言:javascript
复制
select * from test t
where not exists (
  select * from test tt
  where tt.id <> t.id AND left(tt.name,length(t.name))=t.name
)

这样做的目的是将一个较长的字符串中的所有字符从这个字符串的名称长度以上剪掉,并查看结果是否匹配。

演示。

票数 2
EN

Stack Overflow用户

发布于 2015-08-15 14:15:08

这会管用的。试一次。

代码语言:javascript
复制
SELECT categoryid
     , category
  FROM TABLE
 WHERE category like '%-%-%'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32025465

复制
相关文章

相似问题

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