2016-08-23 3 views
1

Ich stieß auf ein Problem mit MySQL und fügte Felder aus der ausgewählten Quellentabelle hinzu.MySQL create/select fügt Felder aus der Quelltabelle hinzu

Hier ist ein Beispiel (Sie können es auf SQL Fiddle finden.

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; 

Am Ende meiner example_table ein foo Feld haben, dass ich nie plus erstellen angefordert werden, wird bar leer sein während foo wird gefüllt werden.


Die Lösung fand ich ist Aliase für jedes Feld zu verwenden, aber es ist r edundant:

Gibt es einen Trick in der MySQL-Konfiguration, um dieses Verhalten zu vermeiden? Ich denke, es würde überraschende Tabellen schaffen.

+0

Sie können eine Ansicht erstellen, wenn Sie möchten – senK

Antwort

1

Dies ist das dokumentierte Verhalten von insert ... select ..., so gibt es keine Möglichkeit, es zu konfigurieren, um dieses Verhalten zu vermeiden:

MySQL für alle Elemente in der SELECT neue Spalten erzeugt. Beispiel:

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

Dies erstellt eine MyISAM-Tabelle mit drei Spalten, a, b und c.

Verwandte Themen