2016-03-16 6 views
1

У меня есть две таблицы users_new и users_old с некоторым количеством строк. Я хотел бы вставить данные от users_old до users_new с помощью insert select.Сочетание INSERT SELECT и VARIABLES

Таблица users_old имеет одно поле name, которое содержит имя и фамилию.
Таблица users_new должно иметь два поля, имя (name) и фамилию (surname).

Я не знаю, как их сочетать. Любой совет?

SET @str=""; 
SET @firstName=""; 
SET @lastName=""; 

INSERT INTO users_new (name, surname) 
VALUES(
    SELECT @firstName,@lastName; 
    @str=select name 
     FROM users_old 
SET @firstName = SUBSTRING_INDEX(@str, ' ', 1); 
SET @lastName=LTRIM(REPLACE(@str, @firstName, '')) 
); 

ответ

1

Если критерий расщепления пространства, как это следует из кода SQL размещен, то вы можете использовать простую INSERT INTO SELECT заявления:

INSERT INTO users_new (name, surname) 
SELECT SUBSTRING_INDEX(name, ' ', 1), SUBSTRING_INDEX(name, ' ', -1) 
FROM users_old 

Последнее имя выбрано вторым вызовом SUBSTRING_INDEX : этот получает вторую часть поля name, из-за аргумента -1.

+0

спасибо. Это решает мою проблему. – Dana

+0

Это будет работать, если все имена состоят из последнего и имени. Если у вас есть только одно слово для имени, оно будет дублироваться в обоих столбцах, и если у вас есть среднее имя в миксе, последнее имя будет потеряно. – Derenir

+0

спасибо.I понимать) – Dana