SELECT *
FROM qx
WHERE (CONVERT(varchar(4), qxs) IN
          (SELECT groupqx
         FROM usergroup
         WHERE groupname = '管理员'))
这句话不能返回数据。
qxs是int类型的
groupqx是varchar类型的
我这样转换过来应该是没错的吧
如果我把IN后面的换成(1,2,3,4)这样的就可以返回了另外IN后面的select返回的是1,2,3,4,5,6这样的 
应该没错吧 怎么就不能得到返回记录呢?谢谢!!!!

解决方案 »

  1.   

    SELECT * 
    FROM qx 
    WHERE (qxs IN 
              (SELECT convert(int,groupqx)
            FROM usergroup 
            WHERE groupname = '管理员')) 
      

  2.   

    SELECT * 
    FROM qx 
    WHERE  qxs IN 
              (SELECT convert(int,groupqx )
            FROM usergroup 
            WHERE groupname = '管理员')) 
      

  3.   

    为什么错,见
    http://topic.csdn.net/u/20080728/17/0cdb96bc-9817-4570-8039-fcba3b156be4.html最后一点
      

  4.   

    这有转跟没转是一样的
    SELECT * FROM qx 
    WHERE  qxs IN 
           (SELECT groupqx  FROM usergroup 
             WHERE groupname = '管理员')
      

  5.   

    用charindex,patindex,或like( 如果你的子查询只返回一条记录的话)
      

  6.   

    qxs
    你先说下这个字段里存放的的数据是怎样的
      

  7.   

    select 
        distinct q.* 
    from 
        qx q,usergroup u 
    where 
        charindex(','+rtrim(q.qxs)+',' , ','+u.groupqx +',')>0 
        and 
        u.groupname = '管理员'
      

  8.   

    楼上的兄弟 groupqx这个字段里面的内容是“1,2,3,4,5,6”这样存储的(没有引号),怎么能转成int的呢?
    呵呵
      

  9.   


    SELECT A.* FROM qx A
    LEFT JOIN usergroup B
      ON groupname = '管理员' AND CHARINDEX(','+A.QXS+',',','+B.groupqx+',')>0
      

  10.   

    是你理解有问题了, groupqx=“1,2,3,4,5,6” ,根 in (1,2,3,4,5,6) 根本不是一回事。前者是一个值,后者是6个值。以后设计表结构的时候,切记不要用拼字符串的方式存多个ID,这样不好查询了。干脆建个子表存多个ID
      

  11.   

    用拼SQL字符串的方法实现。
    declare @SQL varchar(2000)
    declare @groupqx varchar(200)SELECT @groupqx =groupqx FROM usergroup  WHERE groupname = '管理员' set @SQL = 'SELECT * FROM qx WHERE qxs IN (' + @groupqx  + ')'exec(@SQL)或者就是在VB、C#等客户端程序中拼SQL字符串来执行。