两个表的路径字段的比较的sql语句

NoThatNo 2004-12-31 11:16:20
求指定文件夹的所有父文件夹(包括所有祖先)

a表的路径字段值
1
1.1
1.1.1
1.1.2
1.2
1.2.1
1.2.2
1.3
1.3.1
1.3.2
1.3.3

a表的路径字段值
1.1
1.2.1
1.3

求b表文件夹的所有父文件夹,
得出结果就是:
1
1.2

我写了一个sql,只是我的大体意思,但是不知道如何才能语法正确:

select path
from a
where path <> b.path and path not like '''%' + b.path + '%.'''

...全文
89 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoThatNo 2004-12-31
  • 打赏
  • 举报
回复
等一下,我试试再揭帖
zjcxc 元老 2004-12-31
  • 打赏
  • 举报
回复
--测试

--测试数据
create table a(path varchar(10))
insert a select '1'
union all select '1.1'
union all select '1.1.1'
union all select '1.1.2'
union all select '1.2'
union all select '1.2.1'
union all select '1.2.2'
union all select '1.3'
union all select '1.3.1'
union all select '1.3.2'
union all select '1.3.3'

create table b(path varchar(10))
insert b select '1.1'
union all select '1.2.1'
union all select '1.3'
go

--查询
select a.path
from a,(
select distinct
path=left(path,len(path)-charindex('.',reverse(path)+'.'))
from b
)b where a.path=b.path
go

--删除测试
drop table a,b

/*--测试结果

path
----------
1
1.2

(所影响的行数为 2 行)
--*/
zjcxc 元老 2004-12-31
  • 打赏
  • 举报
回复
--或:
select a.path
from a,(
select distinct
path=left(path,len(path)-charindex('.',reverse(path)+'.'))
from b
)b where a.path=b.path
zjcxc 元老 2004-12-31
  • 打赏
  • 举报
回复
--如果第二个是B表数据,则用:

select distinct a.path
from a,b
where a.path<b.path
and b.path like a.path+'.%'
and charindex('.',stuff(b.path,1,len(a.path)+1,''))=0
zjcxc 元老 2004-12-31
  • 打赏
  • 举报
回复
怎么两个A表的数据?
子陌红尘 2004-12-31
  • 打赏
  • 举报
回复
select
distinct a.路径 as 父文件夹
from
a,b
where
b.路径 like a.路径+'%' and len(b.路径) = len(a.路径)+2
zjcxc 元老 2004-12-31
  • 打赏
  • 举报
回复
没看明白
goregrypeck 2004-12-31
  • 打赏
  • 举报
回复
不明白,说清楚些

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧