Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Объединение столбцов и добавление автоинкримента


Автор: Just123 18.2.2010, 21:53
Есть таблица со следующим содержанием:
| 1 столбец | 2 столбец | 3 столбец | 4 столбец

Требуется объединить 1 со  2 столбцом, и 3 с 4 и добавить еще один столбец с автоинкриментом.
В таблице около 400 записей. Тип каждого столбца integer.

Под объединить я понимаю следующее:

Код

1 столбец | 2 столбец
111           |  222
333           | 444


После объединения, должно вместо этих двух столбцов, остаться одно, со следующим содержанием:
111222
333444


Подскажите пожалуйста, как это можно сделать?

Автор: Akina 18.2.2010, 22:47
Цитата(Just123 @  18.2.2010,  22:53 Найти цитируемый пост)
Требуется

Создать новую таблицу требуемой структуры и вставить в неё данные (insert ... select)
Цитата(Just123 @  18.2.2010,  22:53 Найти цитируемый пост)
объединить 1 со  2 столбцом

Код

cast(concat(fld1,fld2) as unsigned)

Цитата(Just123 @  18.2.2010,  22:53 Найти цитируемый пост)
добавить еще один столбец с автоинкриментом

не трогай - сам заполнится

Автор: Just123 18.2.2010, 23:49
т.е. нужно создать таблицу, следующего вида:

Код

id | field1 | field2


Затем в таблице с данными выполнить команду 
Код

cast(concat(1 столбец, 2 столбец) as unsigned)

 
Затем выбрать все данных и вставить в новую таблицу.

Всё верно?

Большое спасибо за помощь.

Автор: Akina 19.2.2010, 00:17
Цитата(Just123 @  19.2.2010,  00:49 Найти цитируемый пост)
Затем в таблице с данными выполнить команду 

Нет! написАть запрос, который выбирает из старой таблицы данные, выполняет указанные преобразования и складывает результат в таблицу новую. После чего этот запрос выполнить.

Добавлено через 44 секунды
Или, как вариант, ДОБАВИТЬ поля в таблицу, выполнить update с вычислением нового контента, а потом дропнуть старые поля.

Автор: Zloxa 19.2.2010, 11:11
Цитата(Akina @  18.2.2010,  22:47 Найти цитируемый пост)
cast(concat(1 столбец, 2 столбец) as unsigned)

Код

1 столбец | 2 столбец
----------+----------
1         |  222
122       |  2

 smile 

Автор: Akina 19.2.2010, 12:04
А это уже проблемы ТС.

Автор: sTa1kEr 20.2.2010, 12:35
Нумерацию строк можно так-же сделать без автоинкрементного поля при помощи переменной.
Код

SET @i = 0;
SELECT 
    @i := @i +1 AS autoincrement,
    CONCAT(`1 столбец`, `2 столбец`),
    CONCAT(`3 столбец`, `4 столбец`)
FROM table;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)