У меня есть таблица рекордов, в которой есть самоотношения.
Дополнительно - чтобы упростить поиск - у меня есть флаг, который определяет, что на запись была сделана ссылка, и, следовательно, эта строка «устарела» и используется только для целей аудита:
CREATE TABLE Records
(
RecordID INT(5) NOT NULL,
Replaces INT(5) NULL,
Obsolete INT(1) NOT NULL
)
RecordID
- это PK, Replaces
- ссылки на предыдущий RecordID, который теперь заменен, а Obsolete
- избыточная информация, которая просто говорит о том, что другая запись заменила эту. Это просто делает поиск намного проще. Стол очень большой. Это только 3 из столбцов.
Единственная проблема: в одном из запросов системы произошла опечатка, поэтому для небольшого набора строк значение «Устаревшее» не было установлено в 1 (true).
Этот запрос покажет все записи с устаревшим значением, равным 0, которое должно быть равно 1:
SELECT *
FROM Records AS rec1
LEFT JOIN Records AS rec2
ON rec1.Replaces = rec2.RecordID
WHERE rec2.RecordID IS NOT NULL
AND rec2.Obsolete = 0;
Теперь мне нужно запустить UPDATE, чтобы изменить все эти req2.Obsolete с 0 на 1, но я не уверен, как написать запрос с INNER JOIN.