Вопрос: MySQL: Как скопировать строки, но изменить несколько полей?


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

Я могу выбрать строки, которые я хочу скопировать:

select * from Table where Event_ID = "120"

Теперь я хочу скопировать все эти строки и создать новые строки при настройке Event_ID в 155, Как я могу это сделать?


148


источник


Ответы:


INSERT INTO Table
          ( Event_ID
          , col2
           ...
          )
     SELECT "155"
          , col2
           ...
      FROM Table WHERE Event_ID = "120"

Здесь col2, ... представляют остальные столбцы (те Кроме как  Event_ID) в вашей таблице.


205



Это решение, в котором у вас много полей в таблице, и вы не хотите, чтобы получить судороги пальцев от ввода всех полей, просто введите нужные данные :)

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

  1. Создайте временную таблицу со всеми строками, которые вы хотите скопировать
  2. Обновите все строки во временной таблице со значениями, которые вы хотите
  3. Если у вас есть поле автоматического приращения, вы должны установить его в NULL во временной таблице
  4. Скопируйте все строки временной таблицы в исходную таблицу
  5. Удаление временной таблицы

Ваш код:

CREATE table temporary_table AS SELECT * FROM original_table WHERE Event_ID="155";

UPDATE temporary_table SET Event_ID="120";

UPDATE temporary_table SET ID=NULL

INSERT INTO original_table SELECT * FROM temporary_table;

DROP TABLE temporary_table

Общий код сценария:

CREATE table temporary_table AS SELECT * FROM original_table WHERE <conditions>;

UPDATE temporary_table SET <fieldx>=<valuex>, <fieldy>=<valuey>, ...;

UPDATE temporary_table SET <auto_inc_field>=NULL;

INSERT INTO original_table SELECT * FROM temporary_table;

DROP TABLE temporary_table

Упрощенный / сжатый код:

CREATE TEMPORARY TABLE temporary_table AS SELECT * FROM original_table WHERE <conditions>;

UPDATE temporary_table SET <auto_inc_field>=NULL, <fieldx>=<valuex>, <fieldy>=<valuey>, ...;

INSERT INTO original_table SELECT * FROM temporary_table;

Поскольку создание временной таблицы использует TEMPORARY ключевое слово будет автоматически удалено при завершении сеанса (как предлагалось @ ar34z).


113



Допустим, у вашей таблицы есть еще две колонки: foo и bar

INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, "155"
  FROM Table
 WHERE Event_ID = "120"

34



Если в таблице есть множество столбцов и вы не хотите вводить их, вы можете сделать это, используя временную таблицу, например;

SELECT *
INTO #Temp
FROM Table WHERE Event_ID = "120"
GO

UPDATE #TEMP
SET Column = "Changed"
GO

INSERT INTO Table
SELECT *
FROM #Temp

10



Эй, как скопировать все поля, изменить один из них на одно значение + что-то еще.

INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, Event_ID+"155"
  FROM Table
 WHERE Event_ID = "120"

??????????


2



Пока Event_ID является Integer, сделайте следующее:

INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, (Event_ID + 155)
  FROM Table
WHERE Event_ID = "120"

0