Как можно избежать смещения чисел в автоматически создаваемом идентификаторе строки? - PullRequest
0 голосов
/ 07 января 2020

У меня есть рекурсивный массив, который я успешно сплющил для вставки в SQLite.

это два оператора, которые имеют дело с идентификаторами.

npatId & candidateId in the examples below are both integers in the program proper

Первый собирает и присваивает идентификатор связанным строкам таблицы npat

"UPDATE npat SET npatId =  
(SELECT MAX(IFNULL(npatId,0))+1 FROM npat)
WHERE (candidateId = 'candidateId');

, второй заполняет таблицу кандидатный список созданным идентификатором

UPDATE candidateList SET npatId = 
(SELECT npatId FROM npat  WHERE candidateId = 'candidateId' ) 
WHERE candidateId = 'candidateId';

Странность в том, что он ВСЕГДА обновляет npatId, предоставляя для обработки пул из 10 npats и пустую таблицу:

- The npatIds will be npatId=1 through npatId=10 on the initial run
- On subsequent runs the npatIds will count MAX(npatId)+1 and offset by that many.
- Given the same pool of 10 the second run will reassign ids ie, npatId=11 through npatId=20

Хотя десин c из-за обратной связи не существует Обратные операторы в той же транзакции, какие логики c мне нужно использовать, чтобы избежать этого бессмысленного сдвига? Другими словами, как мне присвоить идентификатор ТОЛЬКО в таблице npat, если он еще не существует?

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