日期:2014-05-18  浏览次数:20739 次

Sql语句左连接问题!(字符窜关联)!高手进!
 
select * from AA inner join BB on (convert(varchar(2000),AA.Tid))=BB.TopTids


Tid 是一个int 类型(1001)


TopTIds是个字符窜组(1001、1002、1003)是用、拼接起来的! 


请问大家怎么改怎么能不会出现重复 或者可以关联! 

charindex(convert(varchar(2000), dbo.Finance_Refund.Tid),dbo.Sales_Order.TopTids,0) > 0 

用charindex函数可以关联 但是 这个关联的出现了3个重复数据 
 

------解决方案--------------------
SQL code

charindex('、'+convert(varchar(2000), dbo.Finance_Refund.Tid)+'、','、'+dbo.Sales_Order.TopTids+'、') > 0  
--引号里的是你的分隔符

------解决方案--------------------
SQL code

select * from AA inner join BB on CHARINDEX('、' + RTRIM(AA.Tid) + '、','、' + BB.TopTids + '、') > 0

------解决方案--------------------
SQL code

--try
SELECT  *
FROM    Finance_Refund
WHERE   EXISTS ( SELECT 1
                 FROM   Sales_Orderwhere
                 WHERE  CHARINDEX(',' + LTRIM(Finance_Refund.Tid) + ',', ',' + LTRIM(Sales_Order.TopTids) + ',') > 0 )

------解决方案--------------------
SQL code
--try
SELECT  *
FROM    Finance_Refund
WHERE   EXISTS ( SELECT 1
                 FROM   Sales_Orderwhere
                 WHERE  CHARINDEX('、' + LTRIM(Finance_Refund.Tid) + '、', '、' + LTRIM(Sales_Order.TopTids) + '、') > 0 )

------解决方案--------------------
SQL code
  declare @AA table
(id int,Tid int)
insert into @AA
select 1,1001
 
 declare @BB table
(id int,TopTids varchar(20))

insert into @BB
select 1,  '1001、1002、1003' union all
select 2,  '1002、1003' 

select * from @AA AA inner join @BB BB on CHARINDEX('、' + RTRIM(AA.Tid) + '、','、' + BB.TopTids + '、') > 0
/*
id    Tid    id    TopTids
1    1001    1    1001、1002、1003
*/