表A一个字段,内容都是,分割的id号
IDS
1,2,3,4
3,4,5
10,2,3
。。
表B2个字段
ID,Name
1 ,张三
2 ,李四
3 ,王五
。。
我现在要实现类似这样的查询
 select Name from B where B.ID=(select IDS(这里的IDS只取第一个,前面的数字) from A where IDS='1,2,3,4')请问该怎么写?谢谢

解决方案 »

  1.   

    上面的结果意思就是select Name from B where B.ID=1
      

  2.   

    注意B.ID是整数,A.IDS是字符串
      

  3.   


    select Name from B where B.ID=(select LEFT(IDS,charindex(',',IDS)-1) from A where IDS='1,2,3,4') 
      

  4.   

    谢谢.是我没说清楚,还有一种情况:
    IDS
     1
     1,2,3,4
     3,4,5
     10,2,3
    。。
    就是没有逗号分隔,就一个数字.如果按您的语句,会产生错误:Invalid length parameter passed to the left function.
    请问该怎么处理?谢谢
      

  5.   

    我写的SQL不严谨,没考虑更多情况,实际上是select Name from B where B.ID=(select IDS(这里的IDS只取第一个,前面的数字) from A)
      

  6.   

    select Name from B where B.ID=(select IDS(这里的IDS只取第一个,前面的数字,如果没有,就取全部数字) from A)
      

  7.   

    我按上面的朋友的语句改了一下成功,但不知道有没有问题或者有更好的写法?select LEFT(IDS,case when (charindex(',',IDS)-1)>0 then (charindex(',',IDS)-1) else 1 end) from A
      

  8.   


    select Name 
    from B 
    where B.ID=(
    select CASE charindex(',',IDS)WHEN 0 THEN IDS
    ELSE LEFT(IDS,charindex(',',IDS)-1)
    END
    from A where IDS='1,2,3,4')  
      

  9.   

    select testb.[name] from testb, testa where testb.id=convert(int, 
    left(testa.ids, charindex(',', testa.ids)-1))