我正在尝试在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结束。
答案 0 :(得分:0)
问题是您在item
表中计算具有相同test
值的行,但该表尚未填充。
只需计算log
表中的行数。
因为您看到了所有行,但只想要以前的行,所以必须添加另一个过滤器(如果您没有时间戳之类的内容,请使用rowid
):
..., (SELECT COUNT(*)
FROM log AS l2
WHERE l2.item = l.item
AND l2.rowid <= l.rowid)), ...