Актуализирайте данните от една таблица в друга без общ идентификатор

Бих искал да имам заявка (SQL Server 2012), направете следното: Актуализирайте данните от една таблица в друга, където няма общ запис, който може да бъде свързан (почти сигурен, че не мога просто да се присъединя и след това да актуализирам). единствената прилика е, че таблиците са с еднаква структура

за да бъде лесно (прехвърляне на 100+ елемента)

  • Таблица 1a: KEY, TagName ‹-- Където a.TagName като "Tag1"
  • Таблица 1b: DS_KEY, марка, модел ‹-- източник на данните за актуализация
  • Таблица 2a: KEY, TagName ‹-- Където b.TagName като "Tag2"
  • Таблица 2b: DS_KEY, марка, модел ‹ -- дестинация на данните за актуализация

so,

  • Таблица 1a: 123, Tag1
  • Таблица 1b: 123, Тест1, Модел1
  • Таблица 2a: 456, Tag2
  • Таблица 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, Етикет1, 123, Тест1, Модел1)

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

РЕЗУЛТАТ (456, Етикет 2, 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 записа за поставяне и просто изглежда, че трябва да има по-лесен начин. Благодаря предварително и моля да ме извините за синтактични грешки, тъй като се опитвам да перифразирам въпроса, за да го направя прост (и съм уморен!) :)


person Frank and Beans    schedule 07.10.2013    source източник
comment
Ето пример за работа. Кажете ми, ако това не работи, тъй като никога не съм използвал SQL Fiddle! sqlfiddle.com/#!6/db2fa/4   -  person Frank and Beans    schedule 08.10.2013
comment
Може ли някой да даде някаква представа тук, моля?   -  person Frank and Beans    schedule 09.10.2013


Отговори (2)


Като цяло, когато искате да актуализирате една таблица със стойности от друга таблица, синтаксисът е следният:

UPDATE TableA SET TableA.Value = TableB.Value 
FROM TableA INNER JOIN TableB ON TableA.Key = TableB.Key
person Dan    schedule 07.10.2013
comment
Това е вярно, но не виждам как мога да съединя данните от Table1a/Table1b и Table2a/Table2b, тъй като няма общ КЛЮЧ за свързване между тях - person Frank and Beans; 07.10.2013
comment
Е, в такъв случай вашият въпрос наистина е въпрос на съвпадение на записи между две таблици? Публикувайте няколко примера за съдържанието на вашите таблици и как бихте искали записите да бъдат съпоставени и може би някой тук може да ви помогне да напишете подходящ критерии за JOIN. - person Dan; 07.10.2013
comment

Намерихте причината да имате този проблем тук:

Забележка: Localizable.strings е името на файла по подразбиране, което iOS използва за локализиран текст. Устоявайте на желанието да наименувате файла по друг начин, в противен случай ще трябва да въвеждате името на вашия .strings файл всеки път, когато препращате към локализиран низ.

Ако искате да използвате различен .strings файл за локализация, трябва да използвате метода:

- (NSString *)localizedStringForKey:(NSString *)key
                              value:(NSString *)value
                              table:(NSString *)tableName

и посочете Localized.strings като трети параметър (име на таблица).

- person Frank and Beans; 07.10.2013
comment
Тази проба достатъчна ли е, Дан? Ако не, мога да добавя още или да опитам да пресъздам действителните таблици (все пак вероятно ще е много работа!) - person Frank and Beans; 08.10.2013
comment
@FrankandBeans Нека да видя дали съм ви разбрал правилно: Искате да актуализирате Table2b, така че записът с Key1 = 456 да има другите си колони (Марка и модел), актуализирани, за да съответстват на тези на Table1b с Key1 = 123. Това правилно ли е? Предполагам, че имате повече от един запис в Table2b, който трябва да бъде актуализиран - така че като се има предвид Key1 от Table1b, какъв трябва да бъде Key1 в Table2b? И какъв е смисълът от Table1a и Table1b - според мен не дават никаква полезна информация. - person Dan; 09.10.2013
comment
Да, тук има много повече записи, с които да работите, просто се опитвам да поддържам чата прост. Бях толкова зает с други неща, че ми отне цяла вечност да се върна към това! Вие сте на прав път. В този пример Table2b ще завърши с марка/модел от Table1b. Таблица2b = 123, Тест1, Модел1. Моята заявка ще свързва Tag1 с Tag2 чрез потребителски вход. И така, потребителят задава името на изходния етикет и името на целевия етикет за своята функция „копиране“. Наистина е гадно, че клавишите не могат да се използват за редене на неща, но това прави живота интересен! Още веднъж благодаря предварително!! - person Frank and Beans; 26.10.2013

Нуждаете се от свързваща таблица, за да свържете 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

за да даде правилния резултат

person William Smith    schedule 25.03.2014