將一個表的數據插入到另外一個表中


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

 

1.如果2張表的字段一致,並且希望插入全部數據,可以用這種方法:

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

     例如:insert into insertTest select * from insertTest2;

 

2.如果只希望導入指定字段,可以用這種方法:

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

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

 

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

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

    INSERT INTO 目標表 (字段1, 字段2, ...) SELECT字段1, 字段2, ... FROM來源表 

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

   例如:

     1>.插入多條記錄:

       insert into  insertTest2(id,name)select id,name frominsertTest

     where not exists (select * from insertTest2 where insertTest2.id=insertTest.id);

     2>.插入一條記錄:

       insert into insertTest (id, name) SELECT 100,'liudehua'  FROM dual 

             WHERE not exists (select * from insertTest where insertTest.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語句會把它當做表字段,而表中不存在這個字段,會報錯

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

 

轉載:https://blog.csdn.net/luguling200802544/article/details/46438183


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM