Нет никакого глобального решения. Для любой данной страны это на высоте довольно хитрое.
В Великобритании, почтовых адресах PostOffice controlls, и может обеспечить (по стоимости) адресную информацию в целях проверки.
Правительственные учреждения также сохраняют обширный список адресов, и они централизованно сопоставлены в NLPG (Национальный Географический справочник Земли и Свойства).
На самом деле проверка против этих списков является очень трудной. Большинство людей даже не знает точно, как их адрес, поскольку он сохранен PostOffice. Некоторые компании даже не знают, какое число они находятся на конкретной улице.
Ваш лучший выбор состоит в том, чтобы приблизиться к компании, которая специализируется на такого рода вещи.
Поскольку единственная разница заключается в том, устанавливаете ли вы ur.end_Date либо на текущую дату, либо на существующую дату, не могли бы вы просто использовать следующее:
UPDATE user p
JOIN user_roles ur
ON p.id = ur.user_id
SET
ur.end_date = IF (ur.end_date IS NULL, NOW(), ur.end_date),
p.end_date = NOW(),
p.reason = "Retired"
WHERE p.id = 5