2014-09-02 5 views
0

я в настоящее время есть таблица 15 миллионов старых-записей (TABLE1), другой таблицы 11 миллионов новых записей (TABLE2) и пустую таблицу (Таблица3).Вставка в таблицу на основе сравнения двух других таблиц

Оба table1 и table2 доля данных - Я хотел бы найти записи в table1 таблицы, которые не присутствуют в table2, а затем insert их в Table3.

До сих пор у меня есть следующие (который возвращается неизвестный столбец по ошибке table3.uniqueCode):

INSERT INTO table3 
SELECT * FROM table1 
WHERE table1.uniqueCode != table2.uniqueCode 

я должен отметить, что table1 и таблица2 не имеют ту же структуру, но оба имеют поле uniqueCode, это не КЛЮЧ, а просто буквальный уникальный строковый код.

Любая помощь была бы очень оценена, я рассмотрел ее с помощью инструкции JOIN, но я также столкнулся с ошибками при таком подходе.

Спасибо!

Update - Ответил

Ответ был прост:

INSERT INTO table3 
(SELECT * FROM table1 
WHERE uniqueCode not in (Select uniqueCode from table2)) 

Есть изобилие для разнообразных ответов, ниже которого портного немного разные ситуации. Пожалуйста, посмотрите на них, так как они могут решить несколько разнообразный вопрос, который у вас может быть таким. :)

+1

Не могли бы вы добавить описание таблиц ('ОПИСАТЬ table1',' DESCRIBE table2', 'ОПИСАТЬ table3')? – BlitZ

+0

Вам нужен запрос для Mysql или Sql-Server? – faster2b

+0

Я выполняю эти запросы через клиент командной строки mySQL. Благодаря! – Chuck

ответ

0

если таблицы имеют одинаковую структуру:

INSERT INTO table3 
(SELECT * FROM table1 
WHERE uniqueCode not in (Select uniqueCode from table2)) 
+0

Это работало впервые для меня и было первым ответом, простым и эффективным. Благодаря! Хотя я бы добавил - «структура» должна быть написана как «структура». – Chuck

0

Вы можете попробовать этот

INSERT INTO table3 (uniqueCode) 
SELECT t2.uniqueCode FROM table2 WHERE t2.uniqueCode 
NOT IN 
(SELECT t3.uniqueCode FROM table3 t3 WHERE t3.uniqueCode = t2.uniqueCode) 

Отредактировано

INSERT INTO table3 (uniqueCode) 
SELECT t2.uniqueCode FROM table2 WHERE t2.uniqueCode 
NOT IN 
(SELECT t1.uniqueCode FROM table1 t1 WHERE t1.uniqueCode = t2.uniqueCode) 
+0

стол3 пуст –

+0

, то как насчет этого условия WHERE table2.uniqueCode! = Table3.uniqueCode? –

0

заявление Используйте Merge в SQL. Смотрите пример http://technet.microsoft.com/en-in/library/bb522522(v=sql.105).aspx

BEGIN TRAN; 
MERGE Target AS T 
USING Source AS S 
ON (T.EmployeeID = S.EmployeeID) 
WHEN NOT MATCHED BY TARGET AND S.EmployeeName LIKE 'S%' 
    THEN INSERT(EmployeeID, EmployeeName) VALUES(S.EmployeeID, S.EmployeeName) 
WHEN MATCHED 
    THEN UPDATE SET T.EmployeeName = S.EmployeeName 
WHEN NOT MATCHED BY SOURCE AND T.EmployeeName LIKE 'S%' 
    THEN DELETE 
OUTPUT $action, inserted.*, deleted.*; 
ROLLBACK TRAN; 
0

Шаг за шагом:
сначала мы должны выбрать записи в table1, что не существует в table2 (по вашему вопросу)
если uniqueCode уникальный код (KEY), то:

SELECT * FROM table1 WHERE uniqueCode NOT IN (SELECT uniqueCode FROM table2)

теперь мы должны вставить эти результаты в table3, так:

INSERT INTO table3 
SELECT * FROM table1 WHERE uniqueCode NOT IN (SELECT uniqueCode FROM table2) 

и сделано ...

Внимание: все 3 таблицы должны иметь такую ​​же структуру, в этом ответе

0

Если вам нужно сравнить строки и вы не получили уникальный столбец (вы хотите сравнить все столбцы), вы можете использовать EXCEPT положение, как это:

INSERT INTO table3 
SELECT * 
FROM tabel1 
EXCEPT 
SELECT * 
FROM table2 
0

Я думаю UNION будет лучшим вариантом для использования между двумя столовыми. как:

SELECT t1.* FROM table1 t1 UNION SELECT t2.* FROM table2 t2

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