set @a='1,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161';
select * from user where id in (@a);
为什么只取到一个?

解决方案 »

  1.   

    SET @QQ=CONCAT(' select * from user where id in (',@A,')');
    PREPARE AA FROM @QQ;
    EXEXUTE AA;
      

  2.   

    @a是个字符串变量,并不是一个结果集
    set @a='1,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161';
        select * from user where find_in_set(id,@a);
      

  3.   

     select * from user where find_in_set(id,@a); 
      

  4.   

    一些系统的存储过程资料:
    http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html
      

  5.   

    in()
    函数参数是一个resultfind_in_set();给你个简单例子
    DELIMITER $$ 
    drop procedure if exists  touch_; 
    CREATE PROCEDURE `touch_`(IN a varchar(20),IN b varchar(20),IN c varchar(20)) BEGIN 
    SET  a ="3"; 
    SET  b ="2"; 
    SET  v ="1"; set @v_flag = concat("select * from t where id!=",a," and  id!=",b," and id!=",c); 
    prepare ee from @v_flag; 
    EXECUTE ee ; 
    DEALLOCATE PREPARE ee; 
    END$$ 
    call touch_(‘1’,’2’,’3’);
    存储过程只能在begin 和end 之间设置变量值