我的目标是创建一个具有多个其他表的新表。
所以图表如下:
这是对表的查询。每个表具有相同的列名; id
,name
和address
:
CREATE TABLE internal (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(10),
address VARCHAR(6)
); -- the other tables have same design.
insert into internal(name, address) values ("Jack", "AZ");
insert into internal(name, address) values ("Nelson", "NY");
insert into internal(name, address) values ("Tom", "NY");
insert into external(name, address) values ("Peter", "London");
insert into external(name, address) values ("John", "London");
insert into terminal(name, address) values ("Lisa", "CA");
insert into terminal(name, address) values ("Anna", "ND");
CREATE TABLE result AS
(SELECT internal.*
FROM internal
LEFT JOIN external
ON internal.id = external.id
LEFT JOIN terminal
ON external.id = terminal.id
);
一个问题是mysql会自动合并所有相同名称的列,而不管其他表是否具有自己的数据。
结果:
ID | NAME | ADDRESS |
1 | Jack | AZ |
2 | Nelson | NY |
3 | Tom | NY |
我要这样创建我的表:
ID | NAME | ADDRESS | ID | NAME | ADDRESS | ID | NAME | ADDRESS |
1 | Jack | AZ | 1 | Peter | London | 1 | Lisa | CA |
2 | Nelson | NY | 2 | John | London | 2 | Anna | ND |
3 | Tom | NY |null| null | null |null| null | null |
这在MySQL中可行吗?
答案 0 :(得分:0)
您需要从所有表中进行选择:
SELECT i.*, e.*, t.*
FROM internal i LEFT JOIN
external e
ON i.id = e.id LEFT JOIN
terminal t
ON e.id = t.id;
表中不能包含名称重复的列,因此您可能需要重命名它们:
SELECT i.id, i.name, i.address,
e.id_e, e.name_e, e.address_e,
t.id_t, t.name_t, t.address_t