Как запросить набор идентификаторов UUID, урезанных до наименьшего уникального префикса? - PullRequest
0 голосов
/ 28 декабря 2011

У меня есть база данных SQLite, в которой в качестве ключей хранятся UUID.UUID очень длинные, поэтому для удобства использования я реализовал функцию, которая автоматически дополняет префикс UUID до полного значения UUID (или возвращает NULL для неуникального префикса).

Мне было интересно, существует ли запрос, который может вернуть набор префиксов UUID, так что каждый префикс уникален.Это включает в себя два случая: тот, где каждый префикс UUID является наименьшим размером, который он может иметь, и случай, когда все префиксы UUID имеют длину самого длинного префикса UUID, необходимого для уникальности.:

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

Набор минимальных префиксов будет:

AB
AA
B

Набор префиксов с длиной, необходимой для уникальности:

AB
AA
BA

Любая идея, каксделать это в запросе SQLite?(столбец называется id)

1 Ответ

0 голосов
/ 28 декабря 2011

Это может быть реализовано с использованием аналитических функций, которые есть, например, в СУБД Oracle, но в 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 не желательно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...