2015-03-29 2 views
2

У меня есть две таблицы, каждая из которых содержит по одному столбцу. Я хочу скопировать/объединить данные из этих двух таблиц в другую таблицу с обоими столбцами. Поэтому в приведенном ниже примере я хочу получить данные от Таблица 1 и Таблица 2 для перехода на Таблица 3.Как слить одну таблицу SQL 2005 с другой таблицей?

Я использовал этот запрос:

INSERT **TABLE3** (BIGNUMBER) 
SELECT BIGNUMBER 
FROM **TABLE1**; 
INSERT **TABLE3** (SMALLNUMBER) 
SELECT SMALLNUMBER 
FROM **TABLE2**; 

Когда я сделал это, что скопировал данные из Table1 и Table2, но не поставить данные на один и те же линии. Так получилось так: Simple SQL Merge Wrong

Я пытаюсь получить данные, чтобы выровнять ... совпадение. Таким образом, BIGNUMBER 1234567812345678 должен иметь SMALLNUMBER 123456 рядом с ним. Если я запрашивая я мог бы сделать это с JOIN и LIKE «SMALLNUMBER%», но я не уверен, как это сделать здесь, чтобы данные в конечном итоге, как это: Simple SQL Merge Correct

Он не должен быть причудливое сравнение небольшого номера с номером. Когда я BULK вставляю данные в ТАБЛИЦА 1 и ТАБЛИЦУ 2, они находятся в том же порядке, что и просто копирование данных в ТАБЛИЦУ3 без заботы, если SMALL - начало BIG.

В этих таблицах нет никаких отношений. Это самая простая форма, о которой я могу думать. В основном две плоские таблицы, которые необходимо объединить рядом. Логики для реализации не существует ... начиная с строки 1 и заканчивая BIGNUMBER. Начните с строки 1 снова и перейдите к концу на SMALLNUMBER. Все, что имеет значение, - это если BIGBUMBER имеет 50 строк, а SMALLNUMBER - 50 строк, в конце концов все еще остается только 50 строк.

Когда я использовал запрос выше, я уходил со страницы, которую я читал на MERGE. Теперь, когда я просматриваю это, я не вижу MERGE где-нибудь ... поэтому, возможно, мне просто нужно понять, как использовать MERGE.

+0

Есть ли связь между bignumber и smallnumber? Если так, то, что это? Если нет, сообщите нам и отредактируйте свой вопрос, чтобы удалить все сходства, поэтому данные примера не предполагают отношения. – Bohemian

ответ

0

Если порядок чисел не имеет значения и вы не хотите добавлять другое поле в свои исходные таблицы в качестве предлагаемого jcropp, вы можете использовать функцию ROW_NUMBER() в пределах CTE, чтобы выровнять число по каждой строке, а затем сделать соединение на основе их

WITH C1 AS(
    SELECT ROW_NUMBER() OVER (ORDER BY TABLE1.BIGNUMBER) AS Rn1 
      ,BIGNUMBER 
    FROM TABLE1 
) 
,C2 AS(
    SELECT ROW_NUMBER() OVER (ORDER BY TABLE2.SMALLNUMBER) AS Rn2 
      ,SMALLNUMBER 
    FROM TABLE2 
) 
INSERT INTO TABLE3 
SELECT C1.BIGNUMBER 
     ,C2.SMALLNUMBER 
FROM C1 
INNER JOIN C2 ON C1.Rn1 = C2.Rn2 

Более подробную информацию о ROW_NUMBER(), CTE и INSERT INTO SELECT

+0

Это может сработать ... Я никогда раньше не слышал о CTE. Фактические имена таблиц - все TEMPXX, потому что я работаю с временными данными. Я тоже буду играть с этим и посмотреть, смогу ли я заставить его работать. –

+0

** Обновление ** ваш точный код работал отлично. Я думал, что он собирается зайти в свой собственный временный стол в памяти, но он застрял в таблице 3, где он остается. Спасибо SQLUser! –

0

Чтобы использовать оператор JOIN для объединения двух таблиц, каждый из них должен иметь столбец с общими данными. У вас этого нет, но вы можете его ввести:

  1. Редактировать структуру первой таблицы. Добавьте столбец с именем , например id, и установите атрибуты столбца id на autonumber. Просмотрите таблицу, чтобы убедиться, что столбец id был назначен номеров в правильном порядке.
  2. Сделайте то же самое для второй таблицы.
  3. После того, как вы сделали тщательную проверку, чтобы убедиться, что строки пронумерованы правильно, выполнить запрос, чтобы объединить таблицы:

    SELECT TABLE1.id, TABLE1.BIGNUMBER, TABLE2.SMALLNUMBER INTO TABLE3 FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.id = TABLE2.id

+0

Спасибо jcropp. Я могу это сделать. Можете ли вы привести пример того, как при вводе BULK, когда я делаю столбец идентификатора автопопуляцией? Я могу задать новый вопрос, если это более уместно. У меня такое ощущение, что если я попытаюсь выполнить массовую вставку, данные попытаются войти в первый столбец (ID) или выйти из системы, потому что я не указал ничего в этом столбце. –

Смежные вопросы