select id, name from tblogin where id=1; 
//结果:有2条记录
insert into tblogin(id, name) select id, name from tblogin where id=1;
//成功插入2条记录到tblogin表
//再次运行这个语句循环插入
insert into tblogin(id, name) select id, name from tblogin where id=1;
//成功插入4条记录到tblogin表,如何让它还是插入2条记录,而不是4条记录,也就是记录第一次的查询结果

解决方案 »

  1.   

    建了临时表,create table tblogin_tmp as  select id, name from tblogin where id=1; 
    每次插入都执行  insert into tblogin(id, name) select id, name from tblogin_tmp ; 这样就可以了。
      

  2.   

    把这个表的两条记录插入到一个新表中,之后一直循环这个新表插入就行了。比如下面这样--新表
    CREATE TABLE tab_test(
    select id, name from tblogin where id=1
    );
    insert into tblogin(id, name) select id, name from tab_test
    //成功插入2条记录到tblogin表
    //再次运行这个语句循环插入
    insert into tblogin(id, name) select id, name from tab_test
      

  3.   

    简单地说就是 LIMIT 限制一下,但这不保证一定是 INSERT 最初的 2 条, 如果要保证,参考1楼的
    insert into tblogin(id, name) select id, name from tblogin where id=1 limit 2;
      

  4.   

    想用limit做限制,但是不确定select 结果有几条记录?怎么弄
      

  5.   

    不确定是这种情况,如: select id, name from tblogin where id=1; //有2条记录 select id, name from tblogin where id=2; //有5条记录 select id, name from tblogin where id=3; //有14条记录也就是不确定limit后面是几
      

  6.   

    -- 先执行一次,把行数记录下来( 也可以直接用 select @r:=count(*) from tblogin where id=1;
    insert into tblogin(id, name) select id, name from tblogin where id=1;
    set @r=found_rows();-- 后面的执行,使用动态语句( limit 不能直接用变量 )
    prepare st from 'insert into tblogin(id, name) select id, name from tblogin where id=1 limit ?';
    -- 多次执行的是这个
    execute st using @r;
    -- 完成之后释放
    deallocate prepare st;
      

  7.   

    执行如下语句后,插入的数量不是我想要的(1)、select id, name from tblogin where id=1; -- 结果有2条记录
    (2)、执行以下语句
    [code=sql]-- 先执行一次,把行数记录下来
    insert into tblogin(id, name) select id, name from tblogin where id=1;
    set @r=found_rows(); -- 6, 18
     
    -- 后面的执行,使用动态语句( limit 不能直接用变量 )
    prepare st from 'insert into tblogin(id, name) select id, name from tblogin where id=1 limit ?';
    -- 多次执行的是这个
    execute st using @r;
    -- 完成之后释放
    deallocate prepare st;(3)、检查发现select id, name from tblogin where id=1; -- 结果有6条记录,即刚才插入了4条记录(4)、再次执行(2),检查发现select id, name from tblogin where id=1; -- 结果有18条记录,即刚才插入了12条记录若改成:-- 先执行一次,把行数记录下来 
    select @r:=count(*) from tblogin where id=1;
    set @r=found_rows();
     
    -- 后面的执行,使用动态语句( limit 不能直接用变量 )
    prepare st from 'insert into tblogin(id, name) select id, name from tblogin where id=1 limit ?';
    -- 多次执行的是这个
    execute st using @r;
    -- 完成之后释放
    deallocate prepare st;检查发现select id, name from tblogin where id=1; -- 每次只插入1条记录
    [/code]
      

  8.   

    insert into tblogin(id, name) select id, name from tblogin where id=1 limit 2;
      

  9.   

    你可以先看一下最原始的时候这张表的最大id是多少,然后加上条件insert into tblogin(id, name) select id, name from tblogin where id=1 and Id<=最大id