2017-04-07 18 views
1

userテーブルの2つのカラム(user_idteam_id)の値をcompany_teamの接合テーブルに挿入しようとしています。しかし、created_atupdated_atカラムの値をcompany_teamに挿入する2つの異なる試みでエラーが発生しており、それらを過ぎて動作させる方法がわかりません。SQL挿入タイムスタンプ問題

私は単にuserテーブル内の同等のフィールドの値を持つ2つのフィールドを更新したかった最初の試みでは、(両方のテーブル上の注意列が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部分に記載されている列と同じ順序で項目を選択する必要があります:あなたの2回目の試行で

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

2回目の作業では、created_atとupdated_atの値にNOW()を使用しました。これはテーブルuserの値を挿入するのではなく、現在のタイムスタンプを挿入します。したがって、あなたがactivelly作成時にそれらを設定する必要はありませんあなたがテーブルにcompany_team

を作成するときに、このケースでは、単にそれに対応した値updated_atに値created_atと「UPDATE CURRENT_TIMESTAMPのデフォルトのCURRENT_TIMESTAMP」の「DEFAULTをCURRENT_TIMESTAMP」を定義するために容易になるだろう時間が自動的に設定されますので、