Дублирование строк SQLite в одну таблицу с одним обновленным полем?

Итак, у меня есть БД, содержащая контакты. У каждого контакта есть поле папки, которое я использую для их категоризации при отображении в приложении, мой идентификатор представляет собой комбинацию уникального идентификатора сервера и типа папки. Я хотел бы взять каждый контакт в моей таблице и продублировать их 1 раз с обновленным значением папки "все".

Итак, если бы у меня было только 2 контакта, если бы перед INSERT выглядело бы примерно так

---------------------------------------------------
id         |   name |   folder |   area |  number |
---------------------------------------------------
1abfav     |  John  |   fav    |   111  | 1234567 |
2cdarchive |  Susan |  archive |   111  | 6785678 |

И после вставки я бы

---------------------------------------------------
id         |   name |   folder |   area |  number |
---------------------------------------------------
1abfav     |  John  |   fav    |   111  | 1234567 |
2cdarchive |  Susan |  archive |   111  | 6785678 |
1aball     |  John  |   all    |   111  | 1234567 |
2cdall     |  Susan |   all    |   111  | 6785678 |

1 ответ

Решение

С участием INSERT INTO ... SELECT:

insert into contacts(id,name,folder,area,number)
select 
  substr(id, 1, length(id) - length(folder)) || 'all',
  name,
  'all',
  area,
  number
from contacts;

Смотрите демо.
Полученные результаты:

| id         | name  | folder  | area | number  |
| ---------- | ----- | ------- | ---- | ------- |
| 1abfav     | John  | fav     | 111  | 1234567 |
| 2cdarchive | Susan | archive | 111  | 6785678 |
| 1aball     | John  | all     | 111  | 1234567 |
| 2cdall     | Susan | all     | 111  | 6785678 |
Другие вопросы по тегам