sql - скопировать строку и вставить её изменив одно значение

Статус
В этой теме нельзя размещать новые ответы.

okyrok

Создатель
Регистрация
14 Июл 2014
Сообщения
24
Реакции
12
sql - скопировать строку и вставить её изменив одно значение
Ищу наиболее простой, комфортный способ.
Реально ли на чистом SQL ??, если нет - воспользоваться Excel ?! благодарю.
 
Т.з. подробнее...
К примеру, можно такое:

Код:
UPDATE `table` SET `view` = `view` + 1;
 
1. есть таблица, столбцы следующие: естественно id, ... name, ну и допустим string1, string2
2. в ней строкa: 1, vasya, petrov, 22
3. нужно:
  • a. эту строку не изменять
  • б. добавить в эту же таблицу строку 1, vasya, ivanov, 22
выборкойй то понятно
Код:
SELECT * FROM `table` WHERE name = vasya
-в этой выборке у всех заменить бы string1 на ivanov, типа как тут
Код:
UPDATE `table` SET `string1` = ivanov;
-вставить
-профит)

ps Хреновато, наверно, написал
pps и, Горбушка, пора статус менять)
 
Можно так:
1. Создать временную таблицу:
Код:
create table tmp_table as select id,.., 'ivanov' where name = 'ivanov'

2. Вставить в целевую таблицу
Код:
 insert into table select * from tmp_table

3. Удалить временную таблицу
Код:
 drop table tmp_table
 
1. Создать временную таблицу:
o_O Зачем временную то создавать?

PHP:
INSERT INTO `table` SELECT id, name, 'ivanov', string2 FROM `table` WHERE name = 'vasya'

В более сложном случае:
PHP:
INSERT INTO `table` (name, string1, string2) SELECT name, 'ivanov', string2 FROM `table` WHERE `name` = 'vasya'
INTO `table` (name, string1, string2) - перечисляем поля, для сохранения автоинкремента id, иначе id будет повторятся
SELECT name, 'ivanov', - помимо выборки полей таблицы мы можем жестко прописать SELECT строки, как вы понимаете она будет одинаковой для всех выбранных row
 
Последнее редактирование:
o_O Зачем временную то создавать?

Можно без временной конечно. С временной таблицей есть возможность посмотреть на промежуточный результат.

У вас, кстати, ошибка в запросе. Правильно будет так:
PHP:
 INSERT INTO `table` (name, string1, string2) SELECT name, 'ivanov', string2 FROM `table` WHERE `name` = 'vasya'
 
Последнее редактирование:
TC: запрос подсказали правильно в обоих вариантах. Учитывайте только, что при большом объеме информации время выполнения первого и второго запросов будет отличаться. Если таблица небольшая - то абсолютно без разницы
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху