1. 程式人生 > >MySql中把一個表的資料插入到另一個表中

MySql中把一個表的資料插入到另一個表中

將一個表的資料插入到另外一個表中的幾種情況如下:

1.如果2張表的欄位一致,並且希望插入全部資料,可以用這種方法:

     INSERT INTO 目標表 SELECT * FROM 來源表;

     例如:insert into insertTest select * frominsertTest2;

2.如果只希望匯入指定欄位,可以用這種方法:

     INSERT INTO 目標表 (欄位1, 欄位2, ...) SELECT 欄位1, 欄位2,... FROM 來源表;(這           裡的話欄位必須保持一致)

     例如:insert into insertTest2(id,name) select id,name from insertTest2;

 注意:如果目標表與來源表主鍵值相同則會出現新增錯誤,主鍵值不同才能插入

3.如果您需要只匯入目標表中不存在的記錄,可以使用這種方法:   

    INSERTINTO 目標表 (欄位1, 欄位2, ...) SELECT欄位1, 欄位2, ... FROM來源表 

    WHERE not exists (select * from目標表 where 目標表.比較欄位 =來源表.比較欄位); 

   例如:

     1>.插入多條記錄:

       insert intoinsertTest2(id,name)select id,name frominsertTest

     where not exists (select * frominsertTest2 whereinsertTest2.id=insertTest.id);

     2>.插入一條記錄:

       insert intoinsertTest (id, name) SELECT 100,'liudehua'  FROMdual 

             WHERE notexists (select * from insertTest whereinsertTest.id = 100);

4、如果需要匯入的目標表欄位比來源表的欄位多,將來源表的資料匯入再加上幾個欄位組成目標表   的資料

INSERT INTO 目標表 (目標欄位1,目標欄位2,欄位1, 欄位2,...)

     select 目標欄位1,目標欄位2,欄位1, 欄位2,... FROM來源表  

   目標欄位1,目標欄位2:這是目標表比來源表多出的欄位

  例如:

    insert into insertTest2(目標欄位1,目標欄位2,id,name) select 目標欄位1,

         目標欄位2, id,name from insertTest  whereinsertTest2.id=insertTest.id;

     目標欄位1,目標欄位2:可以先設佔位符,在設定值。也可以直接在語句中賦值

    insert into insertTest2(目標欄位1,目標欄位2,id,name) select  a1,

         a2, id,name from insertTest  whereinsertTest2.id=insertTest.id;

5、對上述4的解析

   select a1, a2, id,name from insertTest    

     這裡在表 insertTest裡本身沒有a1,a2兩個欄位名,當使用這個查詢語句時,會查出 insertTest表的所有欄位值,並在表資料的前面加上了列名為a1,a2的欄位,並且列名為a1的值全為a1,列名為a2的值全為a2,並且a1,a2不能為變數,如果是變數,sql語句會把它當做表字段,而表中不存在這個欄位,會報錯

 總結:即可以向一個表中查詢不存在的列名,這裡不存在的列名必須是實際值或佔位符,不能是變數