2011-12-27 30 views
0

我有一個存儲UUID作爲鍵的SQLite數據庫。 UUID很長,所以爲了便於使用,我實現了一個自動完成UUID前綴到完整UUID值(或在非唯一前綴上返回NULL)的函數。如何查詢修剪爲最小唯一前綴的UUID集合?

我想知道是否有一個查詢可以返回一組UUID前綴,使每個前綴都是唯一的。這包括兩種情況:每種UUID前綴是可能的最小尺寸的情況,以及所有UUID前綴都是唯一性所需的最長UUID前綴的長度的情況。

例如,如果數據是:

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

該組最小前綴的將是:

 
AB 
AA 
B 

的前綴集與長度所必需的獨特性:

 
AB 
AA 
BA 

任何想法如何在SQLite查詢中完成此操作? (該列被命名爲id)

回答

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不是所需的