关于select ..in的问题 , 给分给得太快了问题没得到解决,请参见http://expert.csdn.net/Expert/topic/1510/1510600.xml?temp=.1763727我有二个表
A 表
  AID int
  FA varchar(10)  AID    FA
  
  1      'a'B 表
   BID int
   FB varchar(1000)  BID  FB  1   'a','b','c'
  2   'a','b'为什么 
select * from  A from where 'a' in ('a','b','c')
可以实现 而 
select A.* from A inner join B on A.AID=B.BID and A.FA in (B.FB)
实现不了,应该如何实现 
大家可以建表试一下,

解决方案 »

  1.   

    select A.* from A inner join B on A.AID=B.BID where A.FA in (B.FB)
    试试,另外把B表中FB的''去掉试试。
      

  2.   

    select A.* from A inner join B on A.AID=B.BID and charIndex(A.FA B.FB) > 0
      

  3.   

    不对不对,有个问题:你的AID与BID是关键字段吗?是不是唯一的?
      

  4.   

    用你的语句实现不了FB只是一个字串, 所以,你只能用字串处理!!!
    用IN是不可以的。
      

  5.   

    AID不是主键,BID是主键

    AID FA
    1   'a'
    1   'b'
    1   'c'
    2   'a'
    2   'b'BID FB
    1   'a','b','c'
    2   'a','b'用不用引号我都试过,引号处理起来让人混淆因为引号在Delphi中和MS SQL 中都是 用 ''来表示的具体用不用引号,要看哪个方便用引号主要是为与数值形相区别,
    PATINDEX 我也用过,但感觉好像是处理字符串似的,假如引号里面还有引号怎么处理,
      

  6.   

    function ChangeStarChar(sourStr : string): string ;
    var
         i : integer;
    begin
      sourStr:=StringReplace(sourStr,'_','[_]',[rfReplaceAll]);
      sourStr:=StringReplace(sourStr,'"','""',[rfReplaceAll]);
      sourStr:=StringReplace(sourStr,''','''',[rfReplaceAll]);
      while  pos('*',sourStr)>0 do
        sourStr[pos('*',sourStr)]:='%' ;
      result:=sourStr;
    end;with ADODataSet1 do
    begin
      Active := False;
      CommandText := 'select A.* from A inner join B on ChangeStarChar(A.AID)=ChangeStarChar(B.BID) where ChangeStarChar(A.FA) in (select FB from B)'
      Active := True;
    end;