2016-08-23 4 views
1

ソーステーブルのフィールドを追加してMySQLで問題が発生しました。ここでMySQLの作成/選択でソーステーブルのフィールドが追加される

は(あなたがSQL Fiddle上でそれを見つけることができる例です。、

CREATE TABLE source_table (
    id INT UNSIGNED NOT NULL, 
    foo VARCHAR(3), 
    INDEX (id) 
); 
INSERT INTO source_table (id, foo) VALUES (1, "one"); 

// Create another table and fill it from the source_table 
CREATE TABLE example_table (
    id INT UNSIGNED NOT NULL, 
    bar VARCHAR (3), 
    INDEX (id) 
) SELECT 
    source_table.id, 
    source_table.foo 
FROM source_table 
WHERE source_table.id = 1; 

最後に私のexample_tableは、私が作成することを要求しないことを、fooフィールドを持つことになります プラス、barは空になりますfooが満たされたことにする。


私が見つけた解決策は、各フィールドのエイリアスを使用することですが、それは、rですedundant:

CREATE TABLE example_table (
    id INT UNSIGNED NOT NULL, 
    bar VARCHAR (3), 
    INDEX (id) 
) SELECT 
    source_table.id AS id, 
    source_table.foo AS bar 
FROM source_table 
WHERE source_table.id = 1; 

この動作を回避するために、MySQLの設定に何かトリックはありますか?私はそれが驚くべきテーブルを作成するように感じる。

+0

必要に応じてビューを作成できます – senK

答えて

1

これはinsert ... select ...の文書化された動作ですので、この動作を回避するように設定する方法はありません。

MySQLはSELECT内のすべての要素に対して新しいカラムを作成します。例:

mysql> CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT, 
    ->  PRIMARY KEY (a), KEY(b)) 
    ->  ENGINE=MyISAM SELECT b,c FROM test2; 

これは、3つの列a、b、およびcを持つMyISAMテーブルを作成します。

関連する問題