问题描述:
现有两张表:Base表和History表
Base表:
Id    Name
1     a
2     b
3     c
4     dHistory表:
His_Id    His_Name
501       a
502       a,b
505       a,b,c
699       a,b,c,d请问一下如何写出符合“History表中任意一条记录的His_Name字段是否完整包含Base中所有记录Name字段组成的字符串”的Sql,即如何实现查询出来的结果是History表中的最后一条记录?

解决方案 »

  1.   

    select top 1 *  from History a
     order by (select count(*) from Base 
                  where charindex(','+Name+',',','+a.His_Name+',')>0) desc
      

  2.   

    select * from History
    where len(His_Name)-len(replace(His_Name,',','')+1=(select count(*) from base)
      

  3.   

    select * from History where His_Name = select [name]+',' from Base for xml path('')
      

  4.   

    追问:再请教两个问题:
        1、History表中任意一条记录的His_Name字段是否未完整包含或没有包含Base中所有记录Name字段组成的字符串,即与上面提问的集合相反
        2、在第一个问题的基础上如何取得His_Name字段中具体未包含Base表Name字段组成的字符串哪些字符,例如History表中第一条记录His_Name为a,那么相对Base表Name组成的a,b,c,d字符串,缺少的是b,c,d,即b,c,d就是上面所需要的查询结果
      

  5.   


    追问:再请教两个问题:
       1、History表中任意一条记录的His_Name字段是否未完整包含或没有包含Base中所有记录Name字段组成的字符串,即与上面提问的集合相反
       2、在第一个问题的基础上如何取得His_Name字段中具体未包含Base表Name字段组成的字符串哪些字符,例如History表中第一条记录His_Name为a,那么相对Base表Name组成的a,b,c,d字符串,缺少的是b,c,d,即b,c,d就是上面所需要的查询结果
      

  6.   


    追问:再请教两个问题:
       1、History表中任意一条记录的His_Name字段是否未完整包含或没有包含Base中所有记录Name字段组成的字符串,即与上面提问的集合相反
       2、在第一个问题的基础上如何取得His_Name字段中具体未包含Base表Name字段组成的字符串哪些字符,例如History表中第一条记录His_Name为a,那么相对Base表Name组成的a,b,c,d字符串,缺少的是b,c,d,即b,c,d就是上面所需要的查询结果