2017-03-10 59 views
0

我有兩個表的結構相同,但內容不同。每個表的第一列是一個自動增量ID。MYSQL如何獲得下一個自動增量時選擇插入

我想要做的是將一些行從一個表插入到另一個表中。但是,id列應該自動設置在目標表中,而不是從源複製。

到目前爲止,我使用的是這樣的:

INSERT INTO table_1 
    SELECT 
     id, 
     column_2, 
     column_3, 
     column_4 
    FROM table_2 
    WHERE column_4 = 'a value' 

我不能只選擇如上圖所示,因爲這將創建表重複的ID 1.

我試圖取代「身份證從表2中的ID '與:(SELECT MAX(id)+1 FROM table_1) AS id。這會得到正確的ID,但不會爲要插入的每一行增加它。

我已經試過(SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA_TABLES WHERE SCHEMA_TABLE = 'table_1') AS id但只是失敗說「無法解析列AUTO_INCREMENT」

我已經試過LAST_INSERT_ID() as id。這實際上是我第一次運行該語句,但進一步的嘗試失敗,消息'重複輸入875的密鑰PRIMARY'

最後,我試圖只留下列,但我然後得到一個錯誤消息說:列數不匹配。

任何人都可以對此有所瞭解嗎?我應該指出,我需要純粹的MySQL。我不在PHP的上下文中。

感謝

回答

1

您必須指定要插入的列,那麼你可以離開它:

INSERT INTO table_1 (column_2, column_3, column_4) 
    SELECT column_2, column_3, column_4 
    FROM table_2 
    WHERE column_4 = 'a value' 
+0

啊。有74列我希望避免這一點,但如果它有效,這沒什麼大不了的。感謝您的幫助 – Typhoon101

+0

@ Typhoon101是的,它很容易變得非常麻煩。更好的一些其他引擎,你可以只查詢一個序列:/ –

0

可以在INSERT語句中指定除了ID所有列,如:

INSERT INTO table_1 (column_2, column_3, column_4) 
    SELECT 
     column_2, 
     column_3, 
     column_4 
    FROM table_2 
    WHERE column_4 = 'a value' 

由於ID是在表2中自動生成的,它會自動獲取該值。

相關問題