2016-08-23 82 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; 

這創建了一個帶有三列a,b和c的MyISAM表。