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