【问题标题】:How do I query the set of UUIDs trimmed to the smallest unique prefix?如何查询修剪为最小唯一前缀的 UUID 集?
【发布时间】:2011-12-28 05:33:47
【问题描述】:

我有一个将 UUID 存储为键的 SQLite 数据库。 UUID 非常长,因此为了便于使用,我实现了一个函数,该函数将 UUID 前缀自动完成为完整的 UUID 值(或在非唯一前缀上返回 NULL)。

我想知道是否有一个查询可以返回一组 UUID 前缀,这样每个前缀都是唯一的。这包括两种情况:一种是每个 UUID 前缀都是它可能的最小大小,另一种是所有 UUID 前缀都是唯一性所需的最长 UUID 前缀的长度。

例如,如果数据是:

AB1234DE... AA1264DE... BA2234DE...

最小前缀集是:

AB AA 乙

具有唯一性所需长度的前缀集:

AB AA 文学学士

知道如何在 SQLite 查询中完成此操作吗? (列名为id)

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    这可以使用例如Oracle DBMS 具有的分析函数来实现,但是在sqlite 中没有办法在sql 查询中编写如此复杂的逻辑。

    我可以建议使用的可能的简写是:

    SELECT COUNT(*) as cnt
    FROM tbl
    GROUP BY SUBSTR(id, 0, 1)
    HAVING COUNT(*) > 1
    

    并增加编程语言中字符串的长度,直到此查询不返回任何行(或者您甚至可以进行嵌套查询),例如:

    SELECT IF(COUNT(*) > 0, 'Duplicates found', 'No duplicates') AS result FROM (
        SELECT 1
        FROM tbl
        GROUP BY SUBSTR(id, 0, 1)
        HAVING COUNT(*) > 1
    )
    

    并增加子字符串的长度,直到不需要result

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2011-04-06
      • 1970-01-01
      • 2011-03-25
      相关资源
      最近更新 更多