現在のシステムに 2 つのテーブルがあり、1 つは現在の電子メールを含み、もう 1 つはグローバル アドレス帳からすべての電子メール アドレスを作成してエクスポートし、プライマリ電子メール アドレスとユーザー ID 値である BIT 値とともに. サブクエリを使用して、どのメールアドレスを変更する必要があるかを見つけるクエリを作成しましたが、サブクエリを使用せずにこれを実行できるはずですが、方法がわかりませんでしたか?
サブクエリを使用せずにこれを行う方法や方法を知っている人はいますか?
私が持っているものは機能しますが、SQL をより適切に記述する方法を学びたいと思っています。
OVER (Partition BY Member_ID) と MAX(CAST( [primary] AS int)) を使用してこれを行うことができたはずですが、それを理解するのに数時間を費やし、失敗しました。
User_Emails
{
email varchar(75)
}
eg:
User_Emails
bob@oldemail.com
sue@evenolderemail.com
jim@otheremail.com
bill@oldemail.com
...
Global_Address_Book
{
Member_ID int
primary BIT
email_address varchar(75)
}
eg:
Member_ID | primary | email_address
1 | 1 | bob@newemail.com
1 | 0 | bob@reallyoldemail.org
1 | 0 | bob@oldemail.com
2 | 1 | sue@newemail.com
2 | 0 | sue@oldemail.com
2 | 0 | sue@reallyoldemail.org
2 | 0 | sue@evenolderemail.com
3 | 1 | bill@newemail.com
3 | 0 | bill@oldemail.com
4 | 1 | jan@alternativeemail.com
...
SELECT Changed_Email_list.email AS Old_Email, New_Email_List.email_address AS New_Email
FROM (SELECT Member_ID, email
FROM [Database].[Global_Address_Book] INNER JOIN [Database].[User_Emails]
ON [Global_Address_Book].[email_address] = [User_Emails].[email]) AS
Changed_Email_list LEFT JOIN
(SELECT Member_ID, email_address
FROM [Database].[Global_Address_Book]
WHERE [primary] = 1) AS New_Email_List
ON Changed_Email_list.Member_ID = New_Email_List.Member_ID