0

Я хотел бы получить запрос (SQL Server 2012): Обновить данные из одной таблицы в другую, где нет общей связующей записи (довольно уверен, что я не может просто присоединиться, а затем обновить). Единственное сходство в том, что таблицы имеют одинаковую структуруОбновить данные из одной таблицы в другую без общего идентификатора

, чтобы сохранить его простым (передача 100+ пунктов)

  • Таблица 1а: КЛЮЧ, TagName < - Где a.TagName как «Tag1»
  • Таблица 1b: DS_KEY, Марка, модель < - источник данных Update
  • Таблица 2a: KEY, TagName < - Где b.TagName как 'tag2'
  • Таблица 2b: DS_KEY, Марка, Модель < - - назначение данных обновления

так,

  • Таблица 1а: 123, Вкладка1
  • Таблица 1b: 123, Тест1, Model1
  • Таблица 2а: 456, Вкладка2
  • Таблица 2b: 456, NULL, NULL

Что у меня есть:

--Query 1 
SELECT KEY, TagName, DS_KEY, Make, Model 
FROM Table1a 
JOIN Table1b 
ON Table1a.KEY = Table1b.DS_KEY 
Where TagName = 'Tag1' 

РЕЗУЛЬТАТ (123, Tag1, 123, Test1, Model1)

--Query 2 
SELECT KEY, TagName, DS_KEY, Make, Model 
FROM Table2a 
JOIN Table2b 
ON Table2a.KEY = Table2b.DS_KEY 
Where TagName = 'Tag2' 

РЕЗУЛЬТАТ (456, Tag2, 456, NULL, NULL)

Возвращает микс, который я хочу работать. Неполадка о том, как обновить Table2b с этого момента. Не могу присоединиться к ним (по крайней мере, я не вижу, как!). Может быть, UNION ALL? действительно надеюсь, что мне не нужно

Update Table2b 
    Set Table2b.Make = 
    (SELECT Make FROM Table1a 
    JOIN Table1b 
    ON Table1a.KEY = Table1b.DS_KEY) 
    FROM Table2a 
    JOIN Table2b 
    ON Table2a.KEY = Table2b.DS_KEY 
    Where Table2a.TagName = 'Tag2' 

Как я уже сказал, у меня есть около 100 записей, чтобы установить, и это только кажется, что там должно быть проще. Заранее благодарю и, пожалуйста, извините любые синтаксические ошибки, поскольку я пытаюсь перефразировать вопрос, чтобы он был простым (и я устал!) :)

+0

Вот образец для работы. Дайте мне знать, если это не работает, поскольку я никогда не использовал SQL Fiddle! http://sqlfiddle.com/#!6/db2fa/4 –

+0

Может кто-нибудь дать некоторое представление здесь, пожалуйста? –

ответ

1

В общем, если вы хотите обновить одну таблицу со значениями из другого таблица, синтаксис выглядит следующим образом:

UPDATE TableA SET TableA.Value = TableB.Value 
FROM TableA INNER JOIN TableB ON TableA.Key = TableB.Key 
+0

Это правда, но я не вижу, как я могу присоединиться к данным Table1a/Table1b и Table2a/Table2b, так как нет общего ключа для соединения между ними. –

+0

Ну, в этом случае ваш вопрос действительно зависит от соответствия записей между два стола? Опубликуйте несколько примеров содержимого ваших таблиц и того, как вы хотите, чтобы записи были сопоставлены, и, возможно, кто-то здесь может помочь вам в написании правильных критериев JOIN. – Dan

+0

Первый раз, так что надеюсь, эта ссылка работает! http://sqlfiddle.com/#!6/db2fa/4 –

0

Для сопоставления Tag1 с Tag2 вам нужен связующий стол. Изменение скрипки, как показано ниже: Вас схема добавить:

create table linking_table 
(
    PK int not null primary key, 
    TagName_a varchar(50), 
    TagName_b varchar(50) 
) 
insert into linking_table (PK, TagName_a, TagName_b) 
values (1,'Tag1','Tag2') 

, а затем запрос 2 становится:

SELECT Table2a.KEY1,Table2a.TagName,Table2b.DS_KEY, Table1b.Make, Table1b.Model 
FROM (Table2a 
JOIN Table2b 
ON Table2a.KEY1 = Table2b.DS_KEY) 
JOIN linking_table 
ON Table2a.TagName = linking_table.TagName_b 
JOIN (Table1a 
JOIN Table1b 
ON Table1a.KEY1 = Table1b.DS_KEY) 
ON Table1a.TagName = linking_table.TagName_a 

дать правильный вывод

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