Как сделать строковые ключи уникальными, добавив числовой суффикс? - PullRequest
2 голосов
/ 12 ноября 2009

У меня есть таблица с двумя столбцами n целых и s varchar. n является первичным ключом. s в основном уникален, но не всегда. Например

n   s
1   New York
2   Moscow
3   Paris
4   London
5   Moscow
6   Berlin
7   Moscow

Я хочу создать другую таблицу с той же структурой, с тем же количеством строк, за исключением того, что s будет сделано уникальным путем добавления числового суффикса для второго и последующих вхождений. Пример:

n   s
1   New York
2   Moscow
3   Paris
4   London
5   Moscow 2
6   Berlin
7   Moscow 3

В одной команде SQL независимым от платформы способом (sqlite - моя база данных). Есть идеи?

Ответы [ 3 ]

5 голосов
/ 12 ноября 2009

ВЫБРАТЬ e.ID, e.Name, (ВЫБЕРИТЕ СЧЕТЧИК (*) ИЗ таблицы 1 как d ГДЕ d.ID

0 голосов
/ 12 ноября 2009

Вы не опубликовали реальную проблему здесь, и я предполагаю, что есть НАМНОГО лучшее решение, чем то, что вы хотите сделать. При этом приведенный ниже код должен дать вам то, что вы хотите. Используйте его на свой страх и риск.

В последнее время я почти исключительно использую MS SQL, но я думаю, что он в основном совместим с ANSI. Исключением будет функция RTRIM. В стандартах ANSI есть функция TRIM, но она не поддерживается в Transact-SQL, который использует RTRIM и LTRIM.

SELECT
     n,
     RTRIM(s + ' ' + COALESCE
     (
          (
          SELECT
               NULLIF(CAST(COUNT(*) AS VARCHAR(10)), 0) AS cnt
          FROM
               Some_Table T2
          WHERE
               T2.s = T1.s AND
               T2.n < T1.n
          ), ''
     )) AS s
FROM
     Some_Table T1

P.S. - Если это ваши настоящие имена столбцов, ваше соглашение об именах столбцов ужасно. ;)

0 голосов
/ 12 ноября 2009

почему бы просто не всегда добавлять значение первичного ключа в начало (или конец) строки? Затем вы всегда можете вставить строку в строку на длину первичного ключа, чтобы вы всегда могли получить именно ту строку, которую хотите.

чтобы ваши данные могли выглядеть так:

n   s
1   1New York
2   2Moscow
3   3Paris
4   4London
5   5Moscow
6   6Berlin
7   7Moscow
.
.
.
100995 100995Paris
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...