select * from table1 a
left join a.name b on a.id=b.id 就是说 那 table1 中的字段name的值作为left join的表名 来查,不知道怎么写!!郁闷!!高手帮帮忙!急

解决方案 »

  1.   

    这样就可以了。DELIMITER $$DROP PROCEDURE IF EXISTS `test`.`sp_left_jion`$$CREATE PROCEDURE `test`.`sp_left_jion`()BEGIN
        set @stmt = concat('select * from table1 a left join ',substring('a.name',locate('.','a.name')+1),' b on a.id=b.id');
        prepare s1 from @stmt;
        execute s1;
        deallocate prepare s1;END$$DELIMITER ;
      

  2.   

    而且 substring('a.name',locate('.','a.name')+1) 这个 的值是 字段名name吧,不是字段name的值吧??
      

  3.   

    字段a.name的值有好多。你必须写一个循环遍历。
    先一次一个记录取出a.name的记录,然后替换掉我写的存储过程里的a.name就可以了。
      

  4.   

    参考一下:
    http://blog.chinaunix.net/u/29134/showart_402376.html
      

  5.   

    算了还是给你写了吧。DELIMITER $$DROP PROCEDURE IF EXISTS `test`.`sp_left_jion`$$CREATE PROCEDURE `test`.`sp_left_jion`()BEGIN
        declare i int default 0;
        declare cnt int default 0;
        select count(name) from table1 into cnt;
        
        while i<cnt do
          set @stmt1 = concat('select a.name from table1 a limit ',i,'1 into @name_c');
          prepare s1 from @stmt1;
          execute s1;
          deallocate prepare s1;
          set @stmt2 = concat('select * from table1 a left join ',substring(@name_c,locate('.',@name_c)+1),' b on a.id=b.id');
          prepare s2 from @stmt2;
          execute s2;
          deallocate prepare s2;
          set i = i + 1;
        end while;END$$DELIMITER ;