Скопировать подмножество данных столбца из одной таблицы в другую - PullRequest
3 голосов
/ 21 октября 2011

У меня есть две таблицы с одинаковой схемой. Давайте назовем их TestTable и TestTableTemp . Мне нужно скопировать только два столбца из TestTableTemp в TestTable, не нарушая другие данные. Строки в TestTable являются подмножеством строк в TestTableTemp. Допустим, столбцы, которые мне нужно скопировать, называются Column1 и Column2 и имеют одинаковые ссылки на первичные ключи по столбцу primaryKey .


В mysql я считаю, что это можно сделать как таковое или нечто подобное:

UPDATE TestTable, TestTableTemp
SET TestTable.Column1 = TestTableTemp.Column1, TestTable.Column2 = TestTableTemp.Column2
WHERE TestTable.primaryKey = TestTableTemp.primaryKey

Sqlite не позволяет определять несколько таблиц в операторе обновления, что можно увидеть в их справочных данных здесь: http://www.sqlite.org/lang_update.html

Лучшее, что я мог придумать, такое:

UPDATE TestTable SET
Column1 = (select TestTableTemp.Column1 from TestTableTemp, TestTable where TestTable.primaryKey = TestTableTemp.primaryKey),
Column2 = (select TestTableTemp.Column2 from TestTableTemp, TestTable where TestTable.primaryKey = TestTableTemp.primaryKey) 
WHERE EXISTS(select * from TestTableTemp where TestTable.primaryKey = TestTableTemp.primaryKey"

Это дает мне синтаксическую ошибку рядом с "." Я предполагаю, что это потому, что я не могу ссылаться на TestTable в скалярных выражениях.

Кто-нибудь может указать мне правильное направление? Любая помощь очень ценится.

EDIT:

Я немного убрал второй запрос. Кажется, для столбца 1 и столбца 2 задается первая строка из этого столбца из TestTableTemp.

1 Ответ

2 голосов
/ 23 июня 2012

Ваш оригинальный запрос для сравнения:

UPDATE TestTable, TestTableTemp
   SET TestTable.Column1 = TestTableTemp.Column1
     , TestTable.Column2 = TestTableTemp.Column2
 WHERE TestTable.primaryKey = TestTableTemp.primaryKey

Вот рабочий запрос (я просто слегка изменил вашу версию):

http://sqlfiddle.com/#!5/f3a19/9

UPDATE TestTable
SET

  Column1 = ( SELECT TestTableTemp.Column1
              FROM   TestTableTemp
              WHERE  TestTableTemp.primaryKey = TestTable.primaryKey )

 ,Column2 = ( SELECT TestTableTemp.Column2
              FROM   TestTableTemp
              WHERE  TestTableTemp.primaryKey = TestTable.primaryKey )

WHERE EXISTS( SELECT NULL
              FROM   TestTableTemp
              WHERE  TestTableTemp.primaryKey = TestTable.primaryKey )
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...