我有一个SQLite数据库,它存储UUID作为键。 UUID非常长,因此为了实用性,我实现了一个函数,它将UUID前缀自动填充到完整的UUID值(或者在非唯一前缀上返回NULL)。
我想知道是否有一个查询可以返回一组UUID前缀,这样每个前缀都是唯一的。这包括两种情况:每个UUID前缀可能是最小的一个,以及所有UUID前缀是唯一性所需的最长UUID前缀长度的情况。
例如,如果数据是:
AB1234DE... AA1264DE... BA2234DE...
最小前缀集合为:
AB AA B
具有唯一性所需长度的前缀集:
AB AA BA
知道如何在SQLite查询中完成此操作吗? (该列名为id)
答案 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