The SQL:
SELECT [U].[FirstName]
, [U].[LastName]
, [U].[Email]
, [U].[UserId]
, [AHI].[Id] AS [AdHocId]
, [R].[AgentId]
, [R].[RsvpId]
, [RC].[AgentId] AS [CertAgentId]
, [RC].[CertId]
FROM [dbo].[Users] AS U
LEFT JOIN [dbo].[AdHocIdentity] AS AHI
ON [AHI].[Email] = [TUI].[Email]
LEFT JOIN [dbo].[Rsvp] AS R
ON [R].[AgentId] = [AHI].[Id]
LEFT JOIN [dbo].[Certificates] AS RC
ON [RC].[RsvpId] = [R].[RsvpId]
WHERE [AHI].[Email] IS NOT NULL
AND [R].[Completed] = 1
AND ( [AHI].[Email] LIKE '%@%' )
ORDER BY [AHI].[Email]
The output:
FirstName LastName Email UserId AdHocId AgentId RsvpId CertAgentId CertId Babs Robespiere babsrobes@yahoo.com 5950B6AB-E2F0-4923-BA45-7AD843D6937F 71283531-90E6-4570-813B-5B1C706030B8 71283531-90E6-4570-813B-5B1C706030B8 03A99511-7FE1-4D8F-B2FB-59E8302FD531 71283531-90E6-4570-813B-5B1C706030B8 FECE9E84-ECE3-4B78-AC2E-A726CCCC8B13 Babs Robespiere babsrobes@yahoo.com 5950B6AB-E2F0-4923-BA45-7AD843D6937F 5950B6AB-E2F0-4923-BA45-7AD843D6937F 5950B6AB-E2F0-4923-BA45-7AD843D6937F DD29555E-EE06-4724-8FCD-B825AECDCC82 5950B6AB-E2F0-4923-BA45-7AD843D6937F 9E46C992-4CB4-453E-A4D0-BD16587235CA
The Goal:
I want to update the Certificates (RC) .AgentId (CertAgentId), and the Rsvp (r) .AgentId to match the Users (u) .UserId. It would render output like this:
FirstName LastName Email UserId AdHocId AgentId RsvpId CertAgentId CertId Babs Robespiere babsrobes@yahoo.com 5950B6AB-E2F0-4923-BA45-7AD843D6937F 5950B6AB-E2F0-4923-BA45-7AD843D6937F 5950B6AB-E2F0-4923-BA45-7AD843D6937F 03A99511-7FE1-4D8F-B2FB-59E8302FD531 5950B6AB-E2F0-4923-BA45-7AD843D6937F FECE9E84-ECE3-4B78-AC2E-A726CCCC8B13 Babs Robespiere babsrobes@yahoo.com 5950B6AB-E2F0-4923-BA45-7AD843D6937F 5950B6AB-E2F0-4923-BA45-7AD843D6937F 5950B6AB-E2F0-4923-BA45-7AD843D6937F DD29555E-EE06-4724-8FCD-B825AECDCC82 5950B6AB-E2F0-4923-BA45-7AD843D6937F 9E46C992-4CB4-453E-A4D0-BD16587235CA
My initial thought was a groan as I contemplated a cursor within a cursor, looping in the outer through all of the Users, and in the inner through all of the Rsvps.
But that'll be ugly, and annoying.
And yes, this is a "1-time" run to update newly imported data - so not a scheduled continuing run.
Update The answer:
/* Update RSVPs */
UPDATE SRR
SET [AgentId] = [U].[UserId]
FROM [dbo].[Users] AS U
LEFT JOIN [dbo].[AdHocIdentity] AS AHI
ON [AHI].[Email] = [U].[Email]
LEFT JOIN [dbo].[Rsvp] AS R
ON [R].[AgentId] = [AHI].[Id]
WHERE [AHI].[Email] IS NOT NULL
AND ( [AHI].[Email] LIKE '%@%' )
AND ([U].[UserId] != [R].[AgentId]);
/* Update Certs */
UPDATE SRC
SET [AgentId] = [U].[UserId]
FROM [dbo].[Users] AS U
LEFT JOIN [dbo].[AdHocIdentity] AS AHI
ON [AHI].[Email] = [U].[Email]
LEFT JOIN [dbo].[Certificates] AS C
ON [C].[AgentId] = [AHI].[Id]
WHERE [AHI].[Email] IS NOT NULL
AND ( [AHI].[Email] LIKE '%@%' )
AND ([U].[UserId] != [C].[AgentId]);