Алгоритм объединения таблиц SQL - PullRequest
1 голос
/ 03 апреля 2012

Мне нужна помощь в объединении двух таблиц в разных базах данных SQLLite.

Давайте назовем таблицы T1 и T2. Таблицы имеют идентичные схемы, но живут в разных базах данных. Давайте предположим, что T1 живет в БД с именем DB_Target, а T2 живет в базе данных с именем DB_Source. Схема для таблиц проста:

Table    Columns 
--------------------------------------
T1       id, url, cat
T2       id, url, cat

Я хочу объединить две таблицы, поэтому, если первая таблица содержит url из второй таблицы, просто обновите столбец cat, в противном случае добавьте из url и cat в первую, увеличив значение id. Простой алгоритм:

for url2 in second_table:
   url1 = "SELECT url FROM first_table"
   if url1 == url2 then Update first_table
   else INSERT INTO first_table and increment id

Поскольку в обеих таблицах содержится URL-адрес около 10 КБ, он очень длинный, существует ли какой-либо алгоритм объединения SQL ???

1 Ответ

3 голосов
/ 03 апреля 2012

Я не на 100% ясно из вашего описания, что именно вам нужно, но я думаю, что это примерно так:

Сначала запустите обновление T1 с соответствующими URL-адресами в T2 ...

UPDATE     T1
SET        T1.Cat = T2.Cat
FROM       Table1 T1
INNER JOIN Table2 T2 on T1.URL = T2.URL

Затем вставьте дополнительные записи из T2 в T1 ....

INSERT INTO Table1 (id, url, cat)
SELECT      T2.id, T2.URL, T2.Cat
FROM        Table2 T2
LEFT JOIN   Table1 T1 on T2.URL = T1.URL
WHERE       T1.URL IS NULL

ПРИМЕЧАНИЯ:

  • вы не указали базу данных и версию, которую выИспользуем.Один оператор MERGE также может быть опцией.
  • Непонятно, является ли ID полем идентификатора / автоинкремента.Если это так, удалите идентификатор из оператора вставки

ОБНОВЛЕНИЕ SQL Lite

Я только использую SQLLite при передаче, так что принимайте это с крошкой соли,Однако, похоже, что вам нужно выполнить две команды ATTACH DATABASE ( docs ), чтобы убедиться, что DB1 и DB2 оба подключены к соединению.Примерно так:

ATTACH DATABASE filename AS database-name;

После того, как две базы данных присоединены, вы можете добавить имена таблиц к имени базы данных.Допустим, вы присоединяете Table1 как DB_Target и Table2 как DB_Source, при котором выбор будет эволюционировать в нечто вроде ...

UPDATE     T1
SET        T1.Cat = T2.Cat
FROM       DB_Target.Table1 T1
INNER JOIN DB_Source.Table2 T2 on T1.URL = T2.URL

Вот статья, которая проведет вас через немногоглубина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...