如何创建一个具有其他不合并表的表?

时间:2020-02-01 13:58:24

标签: mysql sql database datatable backend

我的目标是创建一个具有多个其他表的新表。

所以图表如下:

enter image description here

这是对表的查询。每个表具有相同的列名; idnameaddress

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中可行吗?

1 个答案:

答案 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