MySQL. Как создать новую таблицу, которая является объединением первичного ключа из двух существующих таблиц.

У меня есть две существующие таблицы с разными полями, за исключением первичного ID (varchar, а не int). Я хочу создать третью таблицу, которая по сути является слиянием этих двух, так что для данного Первичного ключа у меня есть все поля в одной таблице.

Какой способ bext сделать это?

Большое спасибо

Ответ 1

Если вы уверены, что у вас есть одна и ровно одна строка в обеих таблицах для данного первичного идентификатора, тогда это должно работать:

SELECT
    tablea.field1, tablea.field2, tablea.field3, ... tablea.fieldn, <---- field list
    tableb.field1, tableb.field2, tableb.field3, ... tableb.fieldm  <---- field list
FROM
    tablea, tableb
WHERE
    tablea.primaryID = tableb.primaryID

Возможно, вы захотите опустить поле первичного идентификатора tablea и tableb из списка полей, если они вам действительно не нужны (в этом запросе оба будут содержать одно и то же значение из-за условия tablea.primaryID = tableb.primaryID).

Синтаксис относительно схож для a VIEW.

Ответ 2

CREATE TABLE result AS 
  (SELECT first.*, 
          second.f1, 
          second.f2, 
          second.f3 
   FROM   first 
          INNER JOIN second 
                  ON first.id = second.id);

Чтобы получить представление, сделайте то же самое, за исключением замены "TABLE" на "VIEW". Если вы идете со столом, а не с представлением, обязательно добавьте первичный ключ, поскольку по умолчанию он не будет добавлен.

Ответ 3

Почему вы создаете новую таблицу? Почему бы вам просто не выполнять запрос, когда вам нужны данные? Если вы просто присоединяетесь к двум таблицам на своем первичном ключе, то большая часть вашего времени доступа к данным будет потрачена на сбор данных обратно в ваше приложение. Вы не собираетесь экономить много времени, предварительно присоединяясь к столам, и вы будете есть много места. Кроме того, вы нацелитесь на свой большой палец, просто ожидая, когда вы впервые обновите исходные таблицы, и забудьте запустить обновление script, чтобы скопировать изменения в объединенную таблицу. Дублированные данные являются злыми, но иногда это необходимо. Это не похоже на одно из тех случаев.

Ответ 4

Для MS SQL используйте этот

SELECT * INTO result 
FROM  table1
INNER JOIN table2
ON table1.id = table2.id