Вставить строки из одной таблицы в другую таблицу при создании дополнительных значений? - PullRequest
1 голос
/ 10 мая 2011

Edit: OOPS, видимо, в моих тестовых таблицах, я забыл установить id как автоинкрементный.После настройки запрос работает как положено.Извините всех!

У меня есть две таблицы: Источник и Dest .

Источник имеет поля field1 и field2

Dest имеет поля id , field1 и field2 .Идентификатор является основным индексом и автоинкрементным.

Я пробовал следующий запрос:

INSERT INTO dest (field1, field2)
SELECT field1, field2
FROM source
WHERE NOT EXISTS(SELECT * 
                 FROM dest 
                 WHERE (source.field2=dest.field2)
                 );

Но тогда идентификатор в каждой скопированной строке равен 0.

Как можноВ своем запросе я говорю, что хочу скопировать field1 и field2 и создать новое автоинкрементное значение для id?

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Вы можете переписать существующий оператор с помощью левого соединения:

INSERT INTO dest (field1, field2)
SELECT field1, field2
FROM source
LEFT JOIN dest
ON source.field2 = dest.field2
WHERE dest.field2 IS NULL;

Идентификатор должен автоматически увеличиваться автоматически. Если нет, убедитесь, что это происходит в определении таблицы (show create table dest).

0 голосов
/ 10 мая 2011

Запрос должен увеличиваться dest.id, если он объявлен как AUTO_INCREMENT.

Пожалуйста, опубликуйте вывод

SHOW CREATE TABLE dest

Кроме того, если вы хотите, чтобы уникальные значения field2 были в dest, вы можете объявить dest.field2 как UNIQUE и просто использовать это:

INSERT IGNORE
INTO    dest
SELECT  field1, field2
FROM    source
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...