Как создать таблицу, в которой есть множество других таблиц без слияния? - PullRequest
0 голосов
/ 01 февраля 2020

Моя задача - создать новую таблицу с несколькими другими таблицами.

Таким образом, диаграмма будет выглядеть следующим образом:

enter image description here

И это запрос таблицы. Каждая таблица имеет одинаковые имена столбцов; 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?

1 Ответ

0 голосов
/ 01 февраля 2020

Вам необходимо выбрать из всех таблиц:

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
...