2017-04-07 132 views
1

我試圖從我的user表中的兩列(user_id,team_id)中插入值到company_team的結表。但是,我通過兩次不同的嘗試將created_atupdated_at列的值插入到company_team中,並且不知道如何處理它們。SQL插入時間戳問題

在第一次嘗試,我只是想與從user表中的等價字段中的值更新兩個領域:(注列在兩個表是DATETIME)

INSERT INTO `company_team` (`created_at`,`updated_at`,`user_id`, `company_id`) 
SELECT `user_id`, `company_id`, `created_at`, `updated_at` 
FROM `user` AS `u` 
WHERE `u`.`company_id` IS NOT NULL; 

錯誤:

Incorrect datetime value: '1' for column 'created_at' at row 1 

然後我試圖只用在創建記錄當前的日期/時間:

INSERT INTO `company_team` (NOW(),NOW(),`user_id`, `company_id`) 
SELECT `user_id`, `company_id`, `created_at`, `updated_at` 
FROM `user` AS `u` 
WHERE `u`.`company_id` IS NOT NULL; 

錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOW(),NOW(),`user_id`, `organization_id`) 
SELECT `user_id`, `company_id`, `' at line 1 

回答

2

當你在做一個插件,該名值的並不重要。他們按位置匹配。

所以,我認爲你只需要重新排序列:

INSERT INTO company_team (user_id, company_id, created_at, updated_at) 
    SELECT user_id, company_id, created_at, updated_at 
    FROM `user` u 
    WHERE u.company_id IS NOT NULL; 

這改變對INSERT側的順序。也許作爲一個習慣問題,我把創建和更新的日期放在最後 - 或者通過給它們默認值自動設置它們。

+0

謝謝!記住列的排序是嚴格的。 – cphill

2

您需要在相同的順序,在INSERT部分列出的列選擇項目:

INSERT INTO `company_team` (`user_id`, `company_id`, `created_at`, `updated_at`) 
SELECT `user_id`, `company_id`, `created_at`, `updated_at` 
FROM `user` AS `u` 
WHERE `u`.`company_id` IS NOT NULL; 
0

關於第二個嘗試你以前NOW()作爲列插入。值(和NOW()函數)應位於SELECT子句中。

0

在您的第二次嘗試中,您將NOW()用於created_at和updated_at值。這不會插入表user中的值,而是您當前的時間戳。在這種情況下,當您創建表company_team

因此你不需要activelly設置它們在創建它會更容易簡單地定義「DEFAULT CURRENT_TIMESTAMP」的價值created_at和「DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP」的價值updated_at相應時間,因爲他們將自動填充