2014-01-06 4 views
1

У меня есть две таблицы в разных базах данных (сервер WAMP) с той же структурой. Я хочу скопировать из первой базы данных (newkt) во вторую (oldkt) все строки, которые не существуют во второй базе данных (oldkt).Как скопировать строки из одной базы данных MySQL в другую

newkt -> table : users (1500 records) (id, name, password) 
oldkt -> table : users (1200 records) (id, name, password) 

Я хочу, чтобы на самом деле добавить строки в базу данных oldkt которой идентификатор не существует в oldkt еще.

Также, если у меня есть более трех столбцов, можно ли их добавить автоматически или мне нужно пометить их все?

+0

использовать обычный SQL, но префикс имен таблиц с именем базы данных + точка, как здесь http://stackoverflow.com/questions/2132654/querying-multiple-databases-at-once – rkosegi

+2

Что вы пробовали до сих пор? если вы показываете свой SQL-запрос, чем вам будет легче вести. –

+0

Ничего до сих пор я боюсь, что буду испортить столы .. !!! – KoZe

ответ

7

Вы можете сделать так:

insert into database1.table select * from database2.table where id not in(select id from database1.table); 
0

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

SELECT * 
INTO TargetDatabase.dbo.TargetTable 
FROM SourceDatabase.dbo.SourceTable 
+0

Большое спасибо за быстрый ответ – KoZe

+0

я получаю сообщение об ошибке необъявленной переменной: oldkt_ , который является именем первой базы данных – KoZe

0

Try код ниже:

INSERT INTO TargetDatabase.dbo.TargetTable 
SELECT * FROM SourceDatabase.dbo.SourceTable 
EXCEPT 
SELECT * FROM TargetDatabase.dbo.TargetTable 
+0

Так что я попытался следующий INSERT INTO oldkt_.dbo.jos_users SELECT * FROM kenaktoolsdata.dbo.jos_users КРОМЕ SELECT * FROM oldkt_.dbo.jos_users Но я получаю ошибку # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с .jos_users SELECT * FROM kenaktoolsdata.dbo.jos_users EXCEPT SELECT * FROM oldkt 'в строке 1 – KoZe

+0

выше код был предоставлен для SQL Server, в этом случае для MY SQL, пожалуйста, используйте приведенный ниже код с левым внешним соединением 'INSERT TargetDatabase.dbo.TargetTable SELECT a. * FROM SourceDatabase.dbo.SourceTable LEFT JOIN TargetDatabase.dbo.TargetTable b ON a.col1 = b.col1 и .... WHERE b.col1 IS NULL или b.col2 is null ..... ' – SaravanaC

0
INSERT INTO oldkt 
SELECT id , name ,password FROM newkt WHERE id NOT IN (SELECT id FROM oldkt) 

Check Here

0

Попробуйте этот запрос

INSERT Table2 
SELECT * FROM Table1 
WHERE [Conditions] 
0

Предупреждение: Первоначально OP помечено на вопрос как и . Я дал ответ для обоих, оставив это на этом, поскольку это более общее решение, чем просто MySQL. При использовании MySQL не забудьте заменить .. в запросе ..

SELECT … INTO table does not work in MySQL (хотя it works in SQL Server) так INSERT … SELECT поможет. Он работает как в MySQL, так и в SQL Server.

Вы можете указать имя таблицы, включая имя базы данных, используя разделитель . (точка) in MySQL и .. (двойная точка) в SQL Server. (См. Также a related question.)

EXCEPT does not work in MySQL поэтому вместо этого мы будем использовать LEFT JOIN и WHERE. (Смотри также a related question.)

SQL Server:

INSERT INTO oldkt..users 
SELECT newkt..users.* 
FROM 
    newkt..users 
    LEFT JOIN oldkt..users USING(id) 
WHERE 
    oldkt..users.id IS NULL 

При использовании в MySQL, просто замените .. с ..

Мое решение работает в предположении, что id является уникальным ключом в обеих таблицах. (Первичный ключ всегда уникален.) Если это не выполняется, условие соединения должно быть скорректировано с учетом этого факта.

+0

Большое спасибо за ответ, но я получаю эту ошибку # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с».jos_users SELECT, kenaktoolsdata..jos_users. * FROM kenaktoolsdata..jos_us' в строке 1 INSERT INTO oldkt _ .. jos_users ВЫБРАТЬ kenaktoolsdata .. jos_users. * ИЗ kenaktoolsdata..jos_users LEFT JOIN oldkt _ .. jos_users ИСПОЛЬЗОВАНИЕ (ИН) ГДЕ oldkt _ .. users.id IS NULL – KoZe

+0

@KoZe Вы использовали запрос, который я написал для MS SQL Server в MySQL. Как я писал, замените все '..' на' .', и он будет работать для вас. Также см. Комментарии ниже вашего вопроса, особенно тот, который просит указать, используете ли вы MySQL или SQL Server. Я дал ответ для обоих. – Palec

+0

У меня была и была такая же ошибка ... в любом случае это работало вставка в базу данных1.table select * from database2.table, где id не в (выберите id из базы данных1.table); может; сделал трюк ?? Его mySql – KoZe

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