34,589
社区成员
发帖
与我相关
我的任务
分享
select keyword_id from db where keyword_id in (3,4)
--查询结果为
keyword_id
3
4
select keyword_id from db2
--查询结果为
keyword_id
;7;
;3;
;3;4;5;7;
--我想要的db2结果是
keyword_id
;7;
;
;5;7;
--请问这句SQL要怎么写,就是过滤db查询出来的结果加;比如查询出来的是3和4就把;3和;4过滤掉,db查询条件keyword_id in (3,4)这个可以变化,谢谢!
create table db(keyword_id int)
insert into db
select 3 union all
select 4 union all
select 5 union all
select 7
create table db2(keyword_id varchar(50))
insert into db2
select ';7;' union all
select ';3;' union all
select ';3;4;5;7;'
-- test1
declare @tsql varchar(6000)
select @tsql='replace('+isnull(@tsql,'keyword_id')+','''+rtrim(keyword_id)+';'','''')'
from db where keyword_id in (3,4)
select @tsql='select '+@tsql+' ''keyword_id'' from db2'
exec(@tsql)
/*
keyword_id
-------------------------
;7;
;
;5;7;
(3 row(s) affected)
*/
-- test2
declare @tsql varchar(6000)
select @tsql='replace('+isnull(@tsql,'keyword_id')+','''+rtrim(keyword_id)+';'','''')'
from db where keyword_id in (5,7)
select @tsql='select '+@tsql+' ''keyword_id'' from db2'
exec(@tsql)
/*
keyword_id
-------------------------
;
;3;
;3;4;
(3 row(s) affected)
*/
if OBJECT_ID('db1')>0 drop table db1
if OBJECT_ID('db2')>0 drop table db2
create table db1(keyword_id varchar(10))
insert into db1
select '3' union
select '4'
create table db2(keyword_id varchar(500))
insert into db2
select ';7;' union
select ';3;' union
select ';3;4;5;7;'
;with t1 as
(
select db1.keyword_id+';' kd,
ROW_NUMBER() over(order by db1.keyword_id) as n
from db1
)
,cte as
(
select REPLACE(db2.keyword_id, t1.kd, '') as keyword_id, t1.n
from db2 join t1 on t1.n=1
union all
select REPLACE(cte.keyword_id, t1.kd, ''), t1.n
from cte join t1 on t1.n=cte.n+1
)
select keyword_id from cte
where n=(select MAX(n) from cte)
drop table db1
drop table db2
-----------结果--------
;7;
;5;7;
;
create table #db(keyword_id int)
insert into #db
select 3 union all
select 4
create table #db2(keyword_id varchar(50))
insert into #db2
select ';7;' union all
select ';3;' union all
select ';3;4;5;7'
declare @keyword varchar
declare cur1 cursor for select keyword_id from #db
where keyword_id in(3,4)
open cur1
fetch next from cur1 into @keyword
while @@fetch_status=0
begin
update #db2 set keyword_id =replace(keyword_id,';'+@keyword,'')
where charindex(';'+@keyword,keyword_id)>0
fetch next from cur1 into @keyword
end
close cur1
deallocate cur1
select * from #db2
select keyword_id
from db2
where keyword_id not in(select keyword_id from db where keyword_id in(3,4))