2011-12-27 2 views
0

У меня есть база данных SQLite, которая хранит UUID в качестве ключей. 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 не желателен

Смежные вопросы