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

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

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

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

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

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

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

Это правда, что строки имеют порядок на диске и столбец 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).

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

0 голосов
/ 30 июня 2011

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

...