MySQLのUNIONでカラム名が統一される挙動のメモ

            MySQL version 5.5.29

以下のような形式は似ているが、カラム名が違うテーブルを2つ以上用意する。 [sql] CREATE TABLE hoge_history ( id int unsigned NOT NULL, hoge_id int unsigned NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB;

CREATE TABLE fuga_history ( id int unsigned NOT NULL, fuga_id int unsigned NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB;

INSERT INTO hoge_history (id, hoge_id) VALUES (1, 1); INSERT INTO fuga_history (id, fuga_id) VALUES (2, 1); [/sql] この2つのテーブルをUNIONでSELECTすると以下のような挙動をする。 [sql] SELECT * FROM hoge_history UNION ALL SELECT * FROM fuga_history; +----+---------+ | id | hoge_id | +----+---------+ | 1 | 1 | | 2 | 1 | +----+---------+

SELECT * FROM fuga_history UNION ALL SELECT * FROM hoge_history; +----+---------+ | id | fuga_id | +----+---------+ | 2 | 1 | | 1 | 1 | +----+---------+ [/sql] 最初にSELECTした方のカラム名に統一されてしまうらしい。 そもそもカラム名が違うものをUNIONするなという話もあるかもしれないが。。。