SQLite3增量部分键序列

时间:2015-09-04 06:47:54

标签: sqlite key partial

我正在尝试在SQLite中创建一个递增列,以便按照导入的文本日志中存在的顺序保存信息并按项目分组。

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

使用下表,我想相对于“item”自动增加“seq”。

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

我尝试了各种INSERT并不断获取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以查看结果时,“seq”总是以1结束。

1 个答案:

答案 0 :(得分:0)

问题是您在item表中计算具有相同test值的行,但该表尚未填充。

只需计算log表中的行数。 因为您看到了所有行,但只想要以前的行,所以必须添加另一个过滤器(如果您没有时间戳之类的内容,请使用rowid):

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