我现在数据库中有一表,该表有两列,一列是ID,一列是Test。然后该表有两条记录如下:id test
1 1,3,5,7,8
2 2,3,6,7,9
求这两条记录相比多出来的部分。(结果是:2,6,9和1,5,8)
也就是记录1比记录2:记录1中不包含记录2的2,6,9
和记录2比记录1:记录2中不包含记录1中的1,5,8请教一SQL语句,谢谢!
1 1,3,5,7,8
2 2,3,6,7,9
求这两条记录相比多出来的部分。(结果是:2,6,9和1,5,8)
也就是记录1比记录2:记录1中不包含记录2的2,6,9
和记录2比记录1:记录2中不包含记录1中的1,5,8请教一SQL语句,谢谢!
解决方案 »
- sql server 2005数据文件458兆,但是LDF文件32GB,正常吗?如何处理?
- 急急.,.,怎么样动态声明变量..,
- 菜鸟问题:如何判断当前安装的SQL2000是个人版还是企业版?
- LouisXIV(夜游神) 请进...............................
- 考勤打卡记录,update 如何选择最大或最小的数据
- 求个SQL2000触发器的写法
- 请问
- 我是傻瓜,搞不懂SQL SERVER 2000怎么用……哪位大虾有相关的傻瓜教程可以提供给我?不甚感激!!!
- 关于成绩的表结构的设计,相信大家以前都碰到过。
- SQL2000与WinGate Client 冲突,如何设置Wingate。
- 在线等~~~~SQL跨域调用~~~
- 需要查出表的字段的个数
insert into #tb(test)
select '1,3,5,7,8'
union select '2,3,6,7,9'
with ta as
(
select A.id, B.value
from(
select id, [value] = convert(xml,' <root> <v>' + replace([value], ',', ' </v> <v>') + ' </v> </root>') from #tb
)A
outer apply(
select value = N.v.value('.', 'varchar(100)') from A.[value].nodes('/root/v') N(v)
)B
)
select value from ta where id =1
except
select value from tb where id =2
在家没安装SQL没法测试,但是这个思路应该没问题
insert into tb(test)
select '1,3,5,7,8'
union select '2,3,6,7,9';WITH cte
AS
(
SELECT t.id,SUBSTRING(t.test,m.number,1) AS test
FROM tb t JOIN master.dbo.spt_values m ON LEN(t.test)>=m.number WHERE m.type='p' AND SUBSTRING(','+t.test,m.number,1)=','
)
SELECT * FROM cte a WHERE a.test NOT IN (SELECT test FROM cte WHERE id=2 ) AND a.id=1DROP TABLE dbo.tb
/*
id test
----------- ----
1 1
1 5
1 8(3 行受影响)
*/1不在2中的,2不在1类推
上面的稍微有点语法问题CREATE table #tb(id int identity(1,1), value varchar(40))
insert into #tb(value)
select '1,3,5,7,8'
union select '2,3,6,7,9'
with ta as
(
select A.id, B.value
from(
select id, [value] = convert(xml,' <root> <v>' + replace([value], ',', ' </v> <v>') + ' </v> </root>') from #tb
)A
outer apply(
select value = N.v.value('.', 'varchar(100)') from A.[value].nodes('/root/v') N(v)
)B
)
select value from ta where id =2
except
select value from ta where id =1
drop table #tb