У меня есть два существующих стола, с различными областями, за исключением Основного ID (varchar, не интервал). Я хочу составить третью таблицу, которая является по существу слиянием этих двух, таких, что для данного Первичного ключа у меня есть все области в одном столе.
Каков bext способ сделать это?
Большое спасибо
Если вы уверены, что у вас есть одна и ровно одна строка в обеих таблицах для данного первичного ID, то это должно сработать:
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
Возможно, вы захотите опустить поле первичного ID таблицы tablea и tableb из списка полей, если они вам на самом деле не нужны (в этом запросе оба будут содержать одно и то же значение из-за условия tablea.primaryID = tableb.primaryID
).
Синтаксис относительно аналогичен и для VIEW
.
CREATE TABLE result AS
(SELECT first.*,
second.f1,
second.f2,
second.f3
FROM first
INNER JOIN second
ON first.id = second.id);
Чтобы получить представление, сделайте то же самое, кроме замены «таблицы» с «View». Если вы идете со столом, а не представителем, убедитесь, что добавьте основной ключ, так как это не будет добавлено по умолчанию.
Почему вы создаете новую таблицу? Почему бы вам не просто выполнить запрос всякий раз, когда вам нужны данные? Если вы просто присоединяетесь к двум таблицам на своем первичном клавише, то большинство вашего времени доступа к данным будет потрачено в Marshalling данные обратно в ваше приложение. Вы не собираетесь экономить много времени предварительно присоединиться к таблицам, и вы будете есть много места. Кроме того, вы стремитесь к вашему большому пальто, просто жду, когда вы впервые обновите свои исходные таблицы и забудьте запустить ваш сценарий обновления, чтобы скопировать изменения в присоединенную таблицу. Дублирующие данные зло , но иногда это необходимо. Это не звучит как один из тех времен.