【问题标题】:SQLite3 increment partial key sequenceSQLite3 增量部分键序列
【发布时间】:2015-11-30 05:45:48
【问题描述】:

我正在尝试在 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 结尾。

【问题讨论】:

    标签: sqlite key partial


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!这是我最初的问题的一个简单示例,它将来自 2 个表(已连接)的数据与一个序列组合在一起,仅限于第 3 个表中的项目。
    猜你喜欢
    • 2011-05-12
    • 2016-11-11
    • 2012-07-14
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多