2010-01-04 2 views
5

У меня есть две таблицы, ТА и ТВ:Объединение двух таблиц в SQLite

та:

key col1 
-------- 
k1 a 
k2 c 

Т.Б.:

key col2 
------- 
k2 cc 
k3 ee 

Они связаны "ключ". Я хочу знать, как я могу получить таблицу, ки, как:

key col1 col2 
------------- 
k1 a 
k2 c cc 
k3 ee 

Есть ли простой способ вместо вставки каждой записи? Это миллион записей таблиц, поэтому мне нужен эффективный способ.

ответ

4

Сделайте VIEW из двух таблиц. Напишите оператор SELECT ... JOIN, который даст вам результат, который вы хотите, а затем используйте его как базу для просмотра.

Пример:

CREATE VIEW 
    database.viewname 
AS 
    SELECT 
    ta.key, 
    ta.col1, 
    tb.col2 
    FROM 
    ta 
    LEFT JOIN 
    tb 
    USING(key) 
+2

Это пропустит 3-ю позицию в желаемой таблице. Это должно быть ПОЛНОЕ ВНЕШНЕЕ ПРИСОЕДИНЕНИЕ –

+0

Джефф, вы правы. Я не читал примеры тщательно. Метод тот же, однако. –

+0

Да, я согласен. –

0

За то, что вы ищете что вам нужно будет сделать FULL OUTER JOIN, чтобы убедиться, что вы не пропустите ни ключей. После того, как вы работаете с запросом, вы можете подумать только о его использовании или создании представления.

Возможно, вам придется обойти ограничения БД, если FULL OUTER JOIN не реализована, вы можете, как правило, просто СОЕДИНИТЬ левое и правое внешнее соединение, чтобы создать свой полный.

+0

Его создание части представления, которую я не могу понять. Я могу сделать полное внешнее соединение, используя два LEFT JOINs и UNION. Кстати, в sqlite нет ПРАВИЛЬНОЙ ВЗАИМОДЕЙШЕЙ РАБОТЫ в sqlite :) Как только я получаю результат запроса, как объединить два столбца? – Sohaib

1

Использование VIEW - это правильный путь, если вы ищете данные для отражения изменений в исходных таблицах.

Если вы на самом деле хотите, чтобы данные, которые будут скопированы в новую таблицу, вам нужно сделать что-то вроде:

CREATE TABLE tc(key,col1,col2) 

INSERT INTO tc (key,col1,col2) 
SELECT ta.key, ta.col1, tb.col2 
FROM ta FULL OUTER JOIN tb USING(key) 

Это будет заполнять новую таблицу с данными из старых таблиц, но они «Могу меняться независимо.

+3

Я считаю, что sqlite (в вопросе) не делает ПОЛНОГО ВНЕШНЕГО ОБЪЕДИНЕНИЯ. – XTL

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