2015-09-04 3 views
1

Я пытаюсь создать увеличивающий столбец в SQLite, чтобы сохранить информацию в том порядке, в котором она существует, в импортированном текстовом журнале и сгруппирована по элементу.SQLite3 increment partial key sequence

CREATE TABLE log (
    row INTEGER PRIMARY KEY AUTOINCREMENT, 
    item TEXT, 
    info TEXT 
); 

Используя следующую таблицу, я хотел бы автоматически увеличивать «seq» относительно «item».

CREATE TABLE test (
    item TEXT, 
    seq INTEGER, 
    info TEXT, 
    CONSTRAINT pk_test PRIMARY KEY (item, seq) 
); 

я пробовал различные вставки и постоянно получают нарушения UNIQUE/Constraint:

INSERT INTO test (item, seq, info) 
    SELECT item, (SELECT count(item) FROM test t WHERE l.item=t.item) + 1, info 
FROM log l; 

INSERT INTO test (item, seq, info) 
    SELECT item, (SELECT COALESCE(MAX(seq),0)+1 FROM test t WHERE l.item=t.item), info 
FROM log l; 

Когда я извлекаю CONSTRAINT, чтобы увидеть результаты, "след" всегда заканчивается до 1.

ответ

0

Проблема в том, что вы подсчитываете строки с тем же значением item в таблице test, но эта таблица еще не заполнена.

Просто подсчитайте строки в таблице log. Потому что вы видите все строки, но хотят только предыдущие строки, необходимо добавить еще один фильтр (если вы не имеете что-то вроде временной метки, используйте rowid):

..., (SELECT COUNT(*) 
     FROM log AS l2 
     WHERE l2.item = l.item 
     AND l2.rowid <= l.rowid)), ... 
+0

Спасибо! Это простой пример моей исходной проблемы, которая объединяет данные из 2 таблиц (объединенные) с последовательностью, ограниченной элементами в третьей таблице. –

Смежные вопросы