Скопируйте и вставьте в ту же таблицу без дублирования и с небольшими изменениями значения - PullRequest
0 голосов
/ 03 мая 2018

таблица1:

| user | name |
|------|------|
| 1103 | rack |
| 1102 | tabs |
| 1103 |  aki |

Я хочу скопировать запись из table1 обратно в table1 снова с некоторыми незначительными изменениями. Я хочу скопировать только тех пользователей, у которых есть значение 1103, изменить его значение на 1104 и скопировать его снова на table1, а если я отредактирую 1103, например, информацию - если я отредактирую rack в 1103 я не хочу, чтобы это изменило значение, которое я недавно скопировал. Ниже правильный формат, который я хочу -

таблица1:

| user |        name |
|------|-------------|
| 1103 | rack-edited |
| 1102 |        tabs |
| 1103 |         aki |
| 1104 |        rack |
| 1104 |         aki |

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Мы можем вставить копию строк с некоторыми изменениями примерно так:

 INSERT INTO table1 
 ( `user`
 , `name`
 )
 SELECT 1104       AS `user`
      , t.name     AS `name`
   FROM `table1` t
  WHERE t.user = 1103
0 голосов
/ 03 мая 2018

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

INSERT INTO table1 (user, name)
SELECT user+1, name FROM table1
WHERE user = 1103;

Вот сценарий sql перед выполнением вышеуказанного оператора: http://sqlfiddle.com/#!9/e6647e/1

И sql fiddle после выполнения: http://sqlfiddle.com/#!9/8e7f78/2

Вывод:

| user | name |
|------|------|
| 1103 | rack |
| 1102 | tabs |
| 1103 |  aki |
| 1104 | rack |
| 1104 |  aki |

Теперь вы можете поиграть со своими предыдущими записями (1103), как хотите, так как они не повлияют на вновь созданные значения (1104). Например, вы можете использовать:

UPDATE table1 SET name = 'rack-edited' WHERE user = 1103 and name = 'rack';

Вот сценарий sql после обновления: http://sqlfiddle.com/#!9/c1813c/1

И вывод:

| user |        name |
|------|-------------|
| 1103 | rack-edited |
| 1102 |        tabs |
| 1103 |         aki |
| 1104 |        rack |
| 1104 |         aki |
0 голосов
/ 03 мая 2018

Вы можете сделать это в 2 заявлениях; сначала скопируйте, затем отредактируйте. Или, скорее, ВЫБЕРИТЕ строки, которые вы хотите скопировать, а затем ВСТАВЬТЕ их, а затем ОБНОВЛЕНИЕ.

INSERT INTO table1 (id, name)
SELECT id + 1, name
FROM table1
WHERE id = 1103;

UPDATE table1
SET name = CONCAT (name, '-edited')
WHERE id = 1103 AND name = 'rack'

Я не уверен на 100%, как называются ваши столбцы, поэтому я использовал общие имена. id - это столбец с 1103 и 1104.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...