Как легко создать таблицу из результата объединения таблиц с одинаковыми именами столбцов / полей - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь объединить 2 таблицы с одинаковой схемой:

SELECT * FROM `tl1` INNER JOIN `tl2` ON tl1.urlid = tl2.urlid

Это работает нормально, пока я не решу изменить запрос, чтобы сохранить его:

CREATE TABLE `tableName` SELECT * FROM `tl1` INNER JOIN `tl2` ON tl1.urlid = tl2.urlid

Это выдает ошибку, говорящую о наличии дублирующих столбцов.

У меня есть первичный ключ в обеих таблицах.

Я нашел решение, наложив псевдонимы каждого столбца из каждой таблицы следующим образом:

CREATE TABLE `tableName` SELECT tl1.id AS L_id1, tl1.filepath AS L_filepath1, tl1.urlid AS L_urlid1, tl1.fieldname AS L_fieldname1, tl1.fieldvalue AS L_fieldvalue1, tl2.id AS L_id2, tl2.filepath AS L_filepath2, tl2.urlid AS L_urlid2, tl2.fieldname AS L_fieldname2, tl2.fieldvalue AS L_fieldvalue2 FROM `tl1` INNER JOIN `tl2` ON tl1.urlid = tl2.urlid

Однако это утомительно.Что если бы в каждой таблице было более 100 столбцов?Есть ли способ заставить это работать без необходимости наложения псевдонимов каждого столбца вручную?Я ищу что-то, что заставит MySQL создать таблицу с именами столбцов в формате «XY», где X - это исходное имя таблицы, а Y - это исходное имя поля, но любые другие решения также подойдут.

PS: Если неясно, когда я использовал «*», мне нужны были столбцы из обеих таблиц, а не только одна.Это две разные таблицы с разными данными, но с одинаковыми именами столбцов.(Кстати, я не могу изменить имена.)

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Сначала, используя mysql workbench .вам нужно создать следующее представление , нажав на нужную схему, затем щелкнув правой кнопкой мыши на представлении.

Это должно выглядеть примерно так:

CREATE VIEW `schema`.`someView` (
    SELECT t1.* 
    FROM `tl1` as t1 
    JOIN `tl2` as t2
    ON (t1.urlid = t2.urlid)
)

Теперь сохраните его, затем снова откройте его на вкладке «Представления», и вы должны увидеть это:

CREATE VIEW `schema`.`someView` (
    SELECT 
    t1.col1,
    t1.col2,
    t1.col3,
    ...
    FROM `tl1` as t1 
    JOIN `tl2` as t2
    ON (t1.urlid = t2.urlid)
)

Теперь вы можете создать псевдоним для дубликатов столбцов, затем добавить t2.*, чтобы добавить остальныеколонки

CREATE VIEW `schema`.`someView` (
    SELECT 
    t1.id as tl1_id,
    ...
    t2.*
    FROM `tl1` as t1 
    JOIN `tl2` as t2
    ON (t1.urlid = t2.urlid)
)

Это самый быстрый способ, который я знаю, чтобы сделать это.Надеюсь, это поможет.

0 голосов
/ 31 мая 2019

Вы можете сделать что-то вроде этого (я не понимаю, почему вы хотите создать третью таблицу, в которой, кажется, у вас уже есть дважды одинаковые данные):

CREATE TABLE `tableName` SELECT tl1.* FROM `tl1` INNER JOIN `tl2` ON tl1.urlid = tl2.urlid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...