У меня есть рекурсивный массив, который я успешно сплющил для вставки в 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, если он еще не существует?