如何查询修剪为最小唯一前缀的UUID集?

时间:2011-12-27 21:18:05

标签: sql sqlite

我有一个SQLite数据库,它存储UUID作为键。 UUID非常长,因此为了实用性,我实现了一个函数,它将UUID前缀自动填充到完整的UUID值(或者在非唯一前缀上返回NULL)。

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

例如,如果数据是:

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

最小前缀集合为:

AB
AA
B

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

AB
AA
BA

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

1 个答案:

答案 0 :(得分:0)

这可以使用分析函数来实现,例如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