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

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

Как лучше всего это сделать?

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

Ответы [ 4 ]

29 голосов
/ 21 января 2010
CREATE TABLE result AS 
  (SELECT first.*, 
          second.f1, 
          second.f2, 
          second.f3 
   FROM   first 
          INNER JOIN second 
                  ON first.id = second.id);

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

1 голос
/ 21 июня 2017

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

SELECT * INTO result 
FROM  table1
INNER JOIN table2
ON table1.id = table2.id
1 голос
/ 21 января 2010

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

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

Синтаксис относительно аналогичен и для VIEW.

0 голосов
/ 21 января 2010

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

...