2015-09-04 81 views
1

我想在SQLite中创建一个增量列,以保持信息存在于导入的文本日志中并按项目分组。SQLite3增量部分键序列

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 /约束违规:

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; 

当我删除约束看到的结果,“序列”永远结束了1

回答

0

问题在于,您要对test表中的item值进行计数,但该表尚未填充。

只需在log表中对行进行计数即可。 因为你看到的所有行,但只想要以前行,则必须添加其他过滤器(如果你没有像一个时间戳,使用rowid):

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

谢谢!这是我原始问题的一个简单例子,它将2个表(连接)中的数据与一个序列相结合,限于第3个表中的项目。 –