2017-10-21 17 views
0

ここにMySQLの新人が入ります。環境変数を格納するデータベースを構築しました。各値には、固有のclass,designation、およびvariableが関連付けられており、それぞれに定義テーブルがあります。私は新しい変数を追加するときに、私は各定義テーブルから新しいテーブルにvariable_mappingsの外来キーをコピーするだけでなく、値を追加する必要があります。 variable_mappings表は次のようになります。select into mysql

+----------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+----------------+--------------+------+-----+---------+----------------+ 
| id    | int(11)  | NO | PRI | NULL | auto_increment | 
| value   | varchar(512) | NO |  | NULL |    | 
| designation_id | int(11)  | NO | MUL | NULL |    | 
| class_id  | int(11)  | NO | MUL | NULL |    | 
| variable_id | int(11)  | NO | MUL | NULL |    | 
+----------------+--------------+------+-----+---------+----------------+ 

今変数を追加するためのコマンドは次のようなものになります。

INSERT INTO variable_mappings (variable_id, designation_id, class_id, value) 
    SELECT variable_definitions.id as 'variable', 
      designation_definitions.id as 'designation', 
      class_definitions.id as 'class' 
    FROM variable_definitions 
    JOIN designation_definitions on designation_definitions.name='development' 
    JOIN class_definitions on class_definitions.name='av-control' 
    WHERE variable_definitions.name='CONFIGURATION-DATABASE-MICROSERVICE-ADDRESS'; 

MySQLをvalueにはデフォルト値はありませんと文句を言い。 variable_mappingsに行を追加するにはどうすればよいですか?

INSERT INTO variable_mappings (variable_id, designation_id, class_id) 
SELECT variable_definitions.id as 'variable', 
     designation_definitions.id as 'designation', 
     class_definitions.id as 'class' 
FROM variable_definitions 
JOIN designation_definitions on designation_definitions.name='development' 
JOIN class_definitions on class_definitions.name='av-control' 
WHERE variable_definitions.name='CONFIGURATION-DATABASE-MICROSERVICE-ADDRESS'; 

またはSELECT文で

INSERT INTO variable_mappings (variable_id, designation_id, class_id, value) 
SELECT variable_definitions.id as 'variable', 
     designation_definitions.id as 'designation', 
     class_definitions.id as 'class', 
     blablabla as 'value' 
FROM variable_definitions 
JOIN designation_definitions on designation_definitions.name='development' 
JOIN class_definitions on class_definitions.name='av-control' 
WHERE variable_definitions.name='CONFIGURATION-DATABASE-MICROSERVICE-ADDRESS'; 

答えて

0

は、INSERT文の列リストから値を削除してくださいかっこ内の列の量として計算します。あなたのケースでは、MySQLに4列に挿入するよう依頼していますが、SELECT文は3列しか返しません。この一周する簡単な方法は次のようにあなたのSELECTNULLを追加することですので:

INSERT INTO variable_mappings (variable_id, designation_id, class_id, value) 
SELECT variable_definitions.id as 'variable', 
     designation_definitions.id as 'designation', 
     class_definitions.id as 'class', 
     NULL /* default value for the 'value' column */ 
FROM variable_definitions 
JOIN designation_definitions on designation_definitions.name='development' 
JOIN class_definitions on class_definitions.name='av-control' 
WHERE variable_definitions.name='CONFIGURATION-DATABASE-MICROSERVICE-ADDRESS'; 

他の代替は、単純に挿入する列のリストからvalueを削除することです。 DDLにはすでに列に既定値NULLが設定されているため、その値が設定されます。

INSERT INTO variable_mappings (variable_id, designation_id, class_id) 
SELECT variable_definitions.id as 'variable', 
     designation_definitions.id as 'designation', 
     class_definitions.id as 'class' 
FROM variable_definitions 
JOIN designation_definitions on designation_definitions.name='development' 
JOIN class_definitions on class_definitions.name='av-control' 
WHERE variable_definitions.name='CONFIGURATION-DATABASE-MICROSERVICE-ADDRESS'; 
0

INSERT INTO SELECT文をフィールドを追加し、列の同じ量を返すようにSELECT文を必要とします。

関連する問題