У меня следующий запрос, я хотел бы привести его в порядок, передав isMatchingNameEmail во второй случай, когда
моя конечная цель - найти соответствующий referenceID по следующей логике:
вернуть referenceID базы данных
если что-то совпадает по имени и адресу электронной почты, если нет, то попробуйте найти его по имени и номеру мобильного телефона, если не вернуть пустое значение
просто хочу посмотреть, есть ли лучший способ сделать это.
спасибо, ребята!
select r.*,
L.U3L_ReferenceID ReferenceID,
case when L.U3L_ReferenceID is null then
(select L.U3L_ReferenceID from [u3_data].[data].[ListData_e0a27] [L]
where r.given_name = L.firstname and r.email = L.emailaddress)
end isMatchingNameEmail,
-- when record is not found and isMatchingNameEmail is null
case when L.U3L_ReferenceID is null
and (select top 1 L.U3L_ReferenceID from [u3_data].[data].[ListData_e0a27] [L]
where r.given_name = L.firstname and r.email = L.emailaddress) is null
then
(select L.U3L_ReferenceID from [u3_data].[data].[ListData_e0a27] [L]
where
r.given_name = L.firstname and
(replace(
replace(
replace(
replace(r.mobilephone
,' ','')
,'(','')
,')','')
,'+','') = L.mobilenumber or
replace(
replace(
replace(
replace(r.mobilephone
,' ','')
,'(','')
,')','')
,'+','') = stuff(L.mobilenumber,1,2,'0') or
replace(
replace(
replace(
replace(r.mobilephone
,' ','')
,'(','')
,')','')
,'+','') = L.mobilenumber))
end isMatchingNameMobile
from @Records r
left Join [u3_data].[data].[ListData_e0a27] [L] with(nolock) on
[r].Id = [L].userid