Как я могу вставить новую строку таблицы в каждую другую строку в существующей таблице?

Хорошо, у меня есть база данных sqlite, в которой примерно 100 строк. Это довольно странная вещь, которую я пытаюсь сделать, но мне нужно вставить новую строку между каждой из существующих строк.

Я пытался использовать оператор Insert следующим образом, но мне не повезло:

insert into t1(column1) values("hello") where id%2 == 0

Итак, я в основном пытаюсь использовать%-оператор, чтобы сказать мне, является ли идентификатор четным или нечетным. Для каждого четного идентификационного номера я хотел бы вставить новую строку.

Что мне не хватает? Что я могу сделать по-другому? Как я могу вставить новую строку в каждую другую строку и обновить индекс?

Спасибо


person Stephen J.    schedule 29.06.2011    source источник


Ответы (2)


Ваш вопрос предполагает, что строки имеют какой-то встроенный порядок, и что вы можете вставлять строки между другими строками. Это не правда.

Это правда, что строки имеют порядок на диске и что столбец id обычно назначается по порядку, но это деталь реализации. Когда вы выполняете запрос, база данных может возвращать строки в любом порядке, который она выбирает, если только вы не укажете, что вы хотите, с помощью предложения ORDER BY.

Теперь я предполагаю, что вы действительно хотите вставить строки между существующими строками в порядке id. Один из способов получить то, что вы хотите, будет выглядеть так:

UPDATE t1 SET id = id * 2
INSERT INTO t1 (id, column) SELECT id+1, "hello" FROM t1

UPDATE удвоит идентификаторы всех существующих строк (поэтому 1,2,3 станет 2,4,6); затем INSERT выполнит запрос к t1 и использует результат для вставки нового набора строк со значениями id на единицу больше, чем существующие строки (таким образом, 2,4,6 становится 3,5,7).

Я не проверял приведенные выше операторы, поэтому не знаю, будут ли они работать или потребуются ли какие-то дополнительные хитрости (например, временная таблица), поскольку мы запрашиваем и обновляем одну и ту же таблицу в одном операторе. Также я, возможно, сделал синтаксическую ошибку.

person benzado    schedule 30.06.2011
comment
Я ценю понимание! Я знаю, что то, о чем я прошу, необычно, я рад, что вы смогли дать мне решение для работы. - person Stephen J.; 30.06.2011

Не считайте строки предварительно упорядоченными в базе данных. База данных будет хранить их по мере поступления или в соответствии с индексом. Ваша задача упорядочить их при поиске (т. е. при запросе данных) в соответствии с вашими потребностями.

person MPelletier    schedule 30.06.2011